laravel 4的Route::controller()方法返回NotFoundHttpException。
laravel 4的Route::controller()方法返回NotFoundHttpException。
我正在尝试在app/routes.php中使用以下代码将路由到一个RESTful控制器:
Route::controller('register', 'RegisterController'); Route::get('/', 'HomeController@showWelcome');
在我的app/controllers/RegisterController.php文件中,我添加了以下内容:
array('alpha', 'min:3'), 'last_name' => array('alpha', 'min:3'), 'company_name' => array('alpha_num'), 'phone_number' => 'regex:[0-9()\-]' ); $validator = Validator::make($data, $rules); if ($validator->passes()) { return '数据已保存。'; } return Redirect::to('register')->withErrors($validator); } }
我遇到以下错误:
Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException
当我在终端运行php artisan routes时,我得到:
+--------+--------------------------------------------------+------+----------------------------+----------------+---------------+ | Domain | URI | Name | Action | Before Filters | After Filters | +--------+--------------------------------------------------+------+----------------------------+----------------+---------------+ | | GET /register/register/{v1}/{v2}/{v3}/{v4}/{v5} | | Register@getRegister | | | | | POST /register/register/{v1}/{v2}/{v3}/{v4}/{v5} | | Register@postRegister | | | | | GET /register/{_missing} | | Register@missingMethod | | | | | GET / | | HomeController@showWelcome | | | +--------+--------------------------------------------------+------+----------------------------+----------------+---------------+
我不明白为什么URI中出现了两次register,第二个GET动作缺失,以及为什么我会收到这个错误。
在Laravel 4中,我们可以使用Route::controller()方法将一个控制器与一个路由路径关联起来。在上面的例子中,我们使用Route::controller()方法将一个名为"RegisterController"的控制器与路径"register"关联起来。
然而,有时候当我们尝试访问该路径时,可能会遇到NotFoundHttpException异常。这个异常表示找不到该路径对应的控制器。
造成这个问题的原因可能是以下两种情况之一:
1. 控制器类名称不正确:首先,我们需要确保控制器类的名称是正确的。在上面的例子中,控制器类的名称应该是"RegisterController"。如果类名称不正确,Laravel就无法找到对应的控制器,从而抛出NotFoundHttpException异常。
2. 路由路径不正确:我们还需要确保路由路径是正确的。在上面的例子中,我们将控制器与路径"register"关联起来。如果我们尝试访问的路径不是"register",而是其他的路径,比如"/",那么Laravel也无法找到对应的控制器,从而抛出NotFoundHttpException异常。
解决这个问题的方法是:
1. 确保控制器类名称正确:首先,我们需要检查控制器类的名称是否正确。确保类名称与Route::controller()方法中指定的名称一致。
2. 确保路由路径正确:接下来,我们需要检查路由路径是否正确。确保访问的路径与Route::controller()方法中指定的路径一致。
例如,如果我们将Route::controller()方法中的路径改为"/",那么我们应该使用以下代码:
Route::controller('/', 'RegisterController');
通过遵循上述解决方法,我们可以解决Laravel 4中Route::controller()方法返回NotFoundHttpException异常的问题。
问题的出现原因是使用了错误的路由方法。解决方法是改用正确的路由方法。
在使用RESTful API时,最好的方式是在路由中使用Route::resource('register', 'RegisterController');
,并将public function getRegister()
改为public function index()
,将public function postRegister()
改为public function store()
。
然后可以使用GET http://localhost/laravel/register
访问index()
,使用POST http://localhost/laravel/register
访问store()
。将http://localhost/laravel/
替换为自己的URL。
同样地,update($id)
用于更新操作,destroy($id)
用于删除操作。
如果你喜欢的话,可以在这里查看我类似的答案:stackoverflow.com/questions/19196636/…和stackoverflow.com/questions/19190389/…,还有stackoverflow.com/questions/19124018/…。
如果你想使用Route::controller('register', 'RegisterController')
的方式,可以使用getIndex
和postIndex
函数名来实现相同的结果。详情请参考:Restful-controllers。
谢谢,经过你们两位的回答,我意识到更合理的做法是允许UsersController处理新用户的创建。我正在把它整合好...