我接手了一个使用Laravel 4的项目,之前的开发人员在routes文件中创建了一个RESTful资源,如下所示:
Route::resource('home/information', 'HomeInformationController',
array('except' => array('create', 'edit')));
现在,当我在HomeInformationController.php中查看时,我看到了用户创建的一些其他方法,但是我没有看到store方法,但是当我向资源发出post请求时,我得到了一个成功的201 created响应。我的问题是,有没有一种方法来执行另一个动作,而不打扰它已经默认做什么?我知道我可以实现一个存储方法自己和这样做,但我想知道是否有一种方法来保持它的方式,并简单地执行一个默认的动作,每次记录被创建。
另外,laravel是如何创建记录的,因为没有存储方法?当您创建资源时,laravel是否默认创建一个?它怎么知道使用的是哪个模型呢?确实有一个叫做HomeInformation.php的模型。我已经搜索了Laravel文档,但没有找到任何东西。
谢谢。
当然可以。
假设你知道路径:
Route::resource('home/information', 'HomeInformationController',
array('except' => array('create', 'edit')));
和
你知道有(在HomeInformationController中)除了create和edit之外的REST方法。
所以你可以创建自定义路由,并使用相同的控制器或其他控制器。
例如:
Route::get('some/custom/route', array('uses' => 'HomeInformationController@existingMethodOrCustomMethod'));
Route::post('some/custom/route/that/handles/post', array('uses' => 'HomeInformationController@existingMethodOrCustomMethod2'));
并添加到您的控制器:
public function existingMethodOrCustomMethod(){/*implementation here*/}
public function existingMethodOrCustomMethod2(){/*implementation here*/}
与参数:
Route::get('some/custom/route/{id}', array('uses' => 'HomeInformationController@existingMethodOrCustomMethod'));
Route::post('some/custom/route/that/handles/post/{id}', array('uses' => 'HomeInformationController@existingMethodOrCustomMethod2'));
并添加到您的控制器:
public function existingMethodOrCustomMethod($id){/*implementation here*/}
public function existingMethodOrCustomMethod2($id){/*implementation here*/}
阅读路由在这里:http://laravel.com/docs/4.2/routing