路由在 Laravel 5.0 处无法正常工作(404 错误)
Routes don't work correctly at Laravel 5.0 (404 Error)
我切换到Laravel 5.0并尝试自我介绍。
有个小问题让我很困惑:
我使用两个控制器类。第一个工作正常,但第二个被忽略。有人能告诉我为什么吗?
routes.php
<?php
Route::controller('/', 'IndexController');
Route::controller('/rezeptliste', 'RecipelistController');
IndexController.php
<?php namespace App\Http\Controllers;
class IndexController extends Controller {
public function getIndex() {
return view('index');
}
}
食谱列表控制器
<?php namespace App\Http\Controllers;
class RecipelistController extends Controller {
public function getIndex() {
return view('recipelist');
}
}
当我访问 / 时,它运行良好。当我尝试访问 /rezeptliste 时出现以下错误:
NotFoundHttpException in Controller.php line 259:
Controller method not found.
in Controller.php line 259
at Controller->missingMethod('rezeptliste')
at call_user_func_array(array(object(IndexController), 'missingMethod'), array('_missing' => 'rezeptliste')) in Controller.php line 246
at Controller->callAction('missingMethod', array('_missing' => 'rezeptliste')) in ControllerDispatcher.php line 162
at ControllerDispatcher->call(object(IndexController), object(Route), 'missingMethod') in ControllerDispatcher.php line 107
at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 108
at ControllerDispatcher->callWithinStack(object(IndexController), object(Route), object(Request), 'missingMethod') in ControllerDispatcher.php line 67
at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\IndexController', 'missingMethod') in Route.php line 204
at Route->runWithCustomDispatcher(object(Request)) in Route.php line 134
at Route->run(object(Request)) in Router.php line 701
at Router->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in Router.php line 703
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 670
at Router->dispatchToRoute(object(Request)) in Router.php line 628
at Router->dispatch(object(Request)) in Kernel.php line 214
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in VerifyCsrfToken.php line 43
at VerifyCsrfToken->handle(object(Request), object(Closure)) in VerifyCsrfToken.php line 17
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 55
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 61
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 36
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 40
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in Kernel.php line 115
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 84
at Kernel->handle(object(Request)) in index.php line 53
这里的问题是 Laravel 中的路由是按照列出的顺序计算的。
这意味着由于您的第一条路线 '/'
也与路线 /rezeptliste
匹配,因此 laravel 将转到 IndexController
并寻找名为 "rezeptliste".
您的路线应该这样排序:
<?php
Route::controller('/rezeptliste', 'RecipelistController');
Route::controller('/', 'IndexController');
这样,/rezeptliste
的特化 url 将首先被 "caught" 发送到 RecipelistController
,而不是被 IndexController 路由捕获。
请参阅 the docs
的 向资源控制器添加其他路由 部分
If it becomes necessary for you to add additional routes to a resource controller beyond the default resource routes, you should define those routes before your call to Route::resource:
Route::get('photos/popular', 'PhotoController@method');
Route::resource('photos', 'PhotoController');
如果您使用 Route:controller() 那么您也必须在您的控制器方法中提及请求类型。像这样
class UserController extends Controller{
public function getUserinfo(){
//
}
public function postNewuser(){
//
}
}
这样路由就可以轻松识别你的请求方式。
现在您可以配置路线
Route::controller('user','UserController');
我认为它会很好
我切换到Laravel 5.0并尝试自我介绍。
有个小问题让我很困惑:
我使用两个控制器类。第一个工作正常,但第二个被忽略。有人能告诉我为什么吗?
routes.php
<?php
Route::controller('/', 'IndexController');
Route::controller('/rezeptliste', 'RecipelistController');
IndexController.php
<?php namespace App\Http\Controllers;
class IndexController extends Controller {
public function getIndex() {
return view('index');
}
}
食谱列表控制器
<?php namespace App\Http\Controllers;
class RecipelistController extends Controller {
public function getIndex() {
return view('recipelist');
}
}
当我访问 / 时,它运行良好。当我尝试访问 /rezeptliste 时出现以下错误:
NotFoundHttpException in Controller.php line 259:
Controller method not found.
in Controller.php line 259
at Controller->missingMethod('rezeptliste')
at call_user_func_array(array(object(IndexController), 'missingMethod'), array('_missing' => 'rezeptliste')) in Controller.php line 246
at Controller->callAction('missingMethod', array('_missing' => 'rezeptliste')) in ControllerDispatcher.php line 162
at ControllerDispatcher->call(object(IndexController), object(Route), 'missingMethod') in ControllerDispatcher.php line 107
at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 108
at ControllerDispatcher->callWithinStack(object(IndexController), object(Route), object(Request), 'missingMethod') in ControllerDispatcher.php line 67
at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\IndexController', 'missingMethod') in Route.php line 204
at Route->runWithCustomDispatcher(object(Request)) in Route.php line 134
at Route->run(object(Request)) in Router.php line 701
at Router->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in Router.php line 703
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 670
at Router->dispatchToRoute(object(Request)) in Router.php line 628
at Router->dispatch(object(Request)) in Kernel.php line 214
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in VerifyCsrfToken.php line 43
at VerifyCsrfToken->handle(object(Request), object(Closure)) in VerifyCsrfToken.php line 17
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 55
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 61
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 36
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 40
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in Kernel.php line 115
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 84
at Kernel->handle(object(Request)) in index.php line 53
这里的问题是 Laravel 中的路由是按照列出的顺序计算的。
这意味着由于您的第一条路线 '/'
也与路线 /rezeptliste
匹配,因此 laravel 将转到 IndexController
并寻找名为 "rezeptliste".
您的路线应该这样排序:
<?php
Route::controller('/rezeptliste', 'RecipelistController');
Route::controller('/', 'IndexController');
这样,/rezeptliste
的特化 url 将首先被 "caught" 发送到 RecipelistController
,而不是被 IndexController 路由捕获。
请参阅 the docs
的 向资源控制器添加其他路由 部分If it becomes necessary for you to add additional routes to a resource controller beyond the default resource routes, you should define those routes before your call to Route::resource:
Route::get('photos/popular', 'PhotoController@method');
Route::resource('photos', 'PhotoController');
如果您使用 Route:controller() 那么您也必须在您的控制器方法中提及请求类型。像这样
class UserController extends Controller{
public function getUserinfo(){
//
}
public function postNewuser(){
//
}
}
这样路由就可以轻松识别你的请求方式。
现在您可以配置路线
Route::controller('user','UserController');
我认为它会很好