我正在尝试使用RESTful控制器。这是我的Route.php
:
Route::resource('test', 'TestController');
Route::get('/', function()
{
return View::make('hello');
});
这是我的TestController.php
<?php
class TestController extends \BaseController {
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
return View::make('test.home');
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store()
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param int $id
* @return Response
*/
public function update($id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return Response
*/
public function destroy($id)
{
//
}
}
我的应用路由为localhost/Test/public/
,并显示“您已到达”消息。但当我尝试localhost/Test/public/test
它给了我“Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException”
这是我的日志:
[2014-05-11 14:29:59] production.ERROR: NotFoundHttpException Route: `http://localhost/Test/public/test` [] []
[2014-05-11 14:29:59] production.ERROR: exception 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException' in C:\wamp\www\test\bootstrap\compiled.php:5289
Stack trace:
#0 C:\wamp\www\test\bootstrap\compiled.php(4663): Illuminate\Routing\RouteCollection->match(Object(Illuminate\Http\Request))
#1 C:\wamp\www\test\bootstrap\compiled.php(4651): Illuminate\Routing\Router->findRoute(Object(Illuminate\Http\Request))
#2 C:\wamp\www\test\bootstrap\compiled.php(4643): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#3 C:\wamp\www\test\bootstrap\compiled.php(698): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#4 C:\wamp\www\test\bootstrap\compiled.php(679): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#5 C:\wamp\www\test\bootstrap\compiled.php(1136): Illuminate\Foundation\Application->handle(Object(Illuminate\Http\Request), 1, true)
#6 C:\wamp\www\test\bootstrap\compiled.php(7218): Illuminate\Http\FrameGuard->handle(Object(Illuminate\Http\Request), 1, true)
#7 C:\wamp\www\test\bootstrap\compiled.php(7815): Illuminate\Session\Middleware->handle(Object(Illuminate\Http\Request), 1, true)
#8 C:\wamp\www\test\bootstrap\compiled.php(7762): Illuminate\Cookie\Queue->handle(Object(Illuminate\Http\Request), 1, true)
#9 C:\wamp\www\test\bootstrap\compiled.php(10768): Illuminate\Cookie\Guard->handle(Object(Illuminate\Http\Request), 1, true)
#10 C:\wamp\www\test\bootstrap\compiled.php(640): Stack\StackedHttpKernel->handle(Object(Illuminate\Http\Request))
#11 C:\wamp\www\test\public\index.php(49): Illuminate\Foundation\Application->run()
#12 {main} [] []
我知道这个问题已被多次询问过。我经历了很多相关的线程,但却无法弄清楚解决方案。
答案 0 :(得分:13)
Laravel中的NotFoundHttpException
例外始终意味着无法为特定网址找到路由器。在您的情况下,这可能是您的Web服务器配置,虚拟主机(站点)配置或.htaccess配置中的问题。
您的公开/ .htaccess应如下所示:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
正如您所看到的那样,第一行IfModule mod_rewrite.c
中存在条件,因此如果您没有安装或启用mode_rewrite,则所有重写规则都将失败并且
localhost/Test/public/
工作正常,但不是这样:
localhost/Test/public/test
另一方面,这个也应该有用,因为这是它的原始形式:
localhost/Test/public/index.php/test
因为Laravel需要重写它才能工作。
请注意,您不应该使用/ public,您的网址应如下所示:
localhost/Test/
这是另一个线索,即您的虚拟主机的文档根目录未正确配置或未指向/ var / www / Test / public,或者您的应用程序所在的任何路径。
所有这些假设您使用的是Apache 2。
答案 1 :(得分:2)
在我的web.php如下之前
Route::group(['prefix' => 'admin', 'middleware' => ['role:admin']], function() {
Route::resource('roles','Admin\RoleController');
Route::resource('users','Admin\UserController');
});
在URL中输入
,并得到相同的错误。解决方案是:
Route::group(['middleware' => ['role:admin']], function() {
Route::resource('roles','Admin\RoleController');
Route::resource('users','Admin\UserController');
});
删除“ prefix” =>“ admin”,因为两个Controller都位于Admin文件夹中
答案 2 :(得分:0)
我发现了另一种可能发生此错误的情况,并且一次没有重写的任何内容。这是一个非常讨厌的错字:)
我有:
Route::get('replicas/item/{id}/{?stub}', ['uses' => 'ProductReplicasController@productview', 'as' => 'database.replicas.productview']);
查看导致此错误的{?stub},它需要{stub?}偏离正轨。但如果你是Laravel的新手(和我一样),那很容易错过,可能需要相当长的时间才能搞清楚。 :)
答案 3 :(得分:0)
当一个项目正在运行时,我得到了相同的错误异常但是同一个localhost上的同一个.htaccess文件的另一个项目无效。事实证明,因为我的项目目录中有大写字母,所以URL也应该是用于路由工作的资本。 W strong的 localhost / minorweb / public / account 无效,但 localhost / minorWeb / public / account 正在运行。 所以,如果似乎没有解决问题,检查您的URL是否与项目目录匹配。
答案 4 :(得分:0)
使用:
Route::get('/performance/{$submit_type}/{$send_selected}/{$date_a}/{$date_b}', 'PerformanceController@calc');
而不是
Route::get('/performance/{submit_type}/{send_selected}/{date_a}/{date_b}', 'PerformanceController@calc');
所以当你使用{$ stuff}
时要注意答案 5 :(得分:0)
在我的情况下,问题是我使用了额外的前缀斜杠,例如:
Route::get('/plans', 'PayPalController@getPlansList')->name('paypal.plans');
而不是:
Route::get('plans', 'PayPalController@getPlansList')->name('paypal.plans');
答案 6 :(得分:0)
将其放入根.htaccess
文件中
以下代码可完成三件事:
注意:RewriteRule ^ index.php [L]
此代码解决了您的问题,我的问题未在[L]
之后添加index.php
RewriteEngine On
<IfModule mod_rewrite.c>
#Session timeout
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
Options +FollowSymlinks
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
答案 7 :(得分:0)
就我而言:
我不得不使用 POST
方法,但我在 GET!
web.php Rout
方法
答案 8 :(得分:0)
就我而言,我在路由中放置了 {$id}
而不是 {id}
答案 9 :(得分:0)
我遇到过这种情况。我检查了我所有的代码,我的解决方案是:
php artisan route:cache
因为我忘记清除路由缓存了。
答案 10 :(得分:-1)
在我的情况下,问题是我在邮递员中打错了路线。
错误的路由:http:// localhost:8000 / methodName
正确的路由:http:// localhost:8000 / api / methodName
我忘记添加“ / api”。
答案 11 :(得分:-2)
要检查的另一件事是你的文档根目录,
我是:WWW / VAR
应该是:
WWW的/ var / mysite的/公共
我讨厌网页开发的另一个原因