laravel 4的Route::controller()方法返回NotFoundHttpException。

13 浏览
0 Comments

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动作缺失,以及为什么我会收到这个错误。

0
0 Comments

在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异常的问题。

0
0 Comments

问题的出现原因是使用了错误的路由方法。解决方法是改用正确的路由方法。

在使用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')的方式,可以使用getIndexpostIndex函数名来实现相同的结果。详情请参考:Restful-controllers

谢谢,经过你们两位的回答,我意识到更合理的做法是允许UsersController处理新用户的创建。我正在把它整合好...

0