Laravel——扩展资源控制器



我有两种不同的形式,应该使用一个控制器。我在路由中使用以下方法将此控制器创建为资源控制器.php:

Route::resource('account', 'AccountController');

在我使用的第一种形式中

{{ Form::model($user, array('route' => array('account.update', $user->id), 'method' => 'PUT', 'class' => 'form-outside', 'files' => true)) }}

由于资源控制器知道更新功能,因此效果很好。

但是,我想创建第二个表单,该表单与帐户相关并更新用户配置文件的其他部分。我现在想通过"updateSettings"之类的函数来扩展控制器。

但是我该怎么做呢?我在帐户控制器中创建了一个函数,并在第二种形式中使用以下函数:

{{ Form::model($user, array('action' => array('AccountController@updateSettings', $user->id), 'method' => 'PUT', 'class' => 'form-outside')) }}

但拉拉维尔触发了一个例外,

未定义路由 [AccountController@updateSettings]。

如何扩展我的资源控制器,使更新设置是一种有效的方法?或者如何在没有资源控制器的情况下使用模型绑定表单?

谢谢!

若要完全扩展资源控制器,需要扩展该类 IlluminateRoutingRouter并覆盖所需的方法。下一步是使用 App::bind() 将旧的路由器类替换为您将编写的新路由器类。

更快的方法是只使用一条新路由,给它一个唯一的名称,例如在你的routes.php中: App::put('updateSettings', 'AccountController@updateSettings') .祝你好运。

或者如何在没有资源的情况下使用模型绑定表单 控制器?

因此,在这种情况下,您可以从控制器绑定模型,实际上您可以手动传递模型,例如,如果您有Post模型并想要编辑帖子,那么您可以从控制器手动加载模型并将其传递给视图以绑定表单,例如:

class PostController extends BaseController {
    //...
    public function getEdit($id)
    {
        $post = Post::find($id);
        return View::make('post.edit')->with('post', $post);
    }
    public function postUpdate($id)
    {
        //...
    }
}

然后在您的views/post/edit.blade.php中,您可以使用这样的东西:

{{ Form::model($post, array('route' => array('post.update', $post->id) )) }}

现在,您需要为这些方法创建路由,如下所示:

Route::get('post/edit/{id}', array('as' => 'post.edit', 'uses' => 'PostController@getEdit'));
Route::post('post/update/{id}', array('as' => 'post.update', 'uses' => 'PostController@postUpdate'));

最新更新