Laravel 同一控制器适用于一条路线而不适用于另一条路线
Laravel same controller work with one route and not with another
更新
为了避免关于 ajax 调用的所有调试和问题,我在控制器中创建了一个只有 echo 'hey!'
的索引方法,并且仍然得到相同的东西:
app.url/blocktest 给我一个 hey
,但更改为 app.url/pictures,注释掉一条路线并取消注释另一条路线给我一个 404
错误.
更新和
我正在使用 laravel(版本 5.4)构建我的第一个应用程序,但是在使用裁剪进行图像上传的过程中,我的路线(最初是照片)开始出现 404 错误,经过数小时的调试我一无所获,所以改变路线,它开始工作,然后再次被封锁,所以我有点困惑,我想我真的没有在这里得到什么。我的实际路线:
Route::resource('partners', 'PartnersController');
//Route::resource('pictures', 'PicturesController');
Route::resource('blocktest', 'PicturesController');
这样一切正常,我的 ajax post 到我的 PicturesController 一切顺利,这是控制器功能:
public function store(Request $request)
{
// echo 'hey';
$requests = request()->file('picture');
foreach ($requests as $picture) {
$filename = time() . '.' . $picture->getClientOriginalExtension();
$path = public_path('pictures/' . $filename);
Image::make($picture->getRealPath())->crop(600, 600)->save($path);
$picture = new Picture;
$picture->partner_id = $request['partner_id'];
$picture->src = $filename;
$picture->save();
}
}
但如果我将路线更改为:
Route::resource('partners', 'PartnersController');
Route::resource('pictures', 'PicturesController');
// Route::resource('blocktest', 'PicturesController')
尝试使用 pictures
并将 ajax 指向新路由,我从 nginx 收到 404。
这是 php artisan route:list
的结果
+--------+-----------+-------------------------+------------------+-----------------------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+-------------------------+------------------+-----------------------------------------------------------+--------------+
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | partners | partners.index | FrutoProibido\Http\Controllers\PartnersController@index | web |
| | POST | partners | partners.store | FrutoProibido\Http\Controllers\PartnersController@store | web |
| | GET|HEAD | partners/create | partners.create | FrutoProibido\Http\Controllers\PartnersController@create | web |
| | GET|HEAD | partners/{partner} | partners.show | FrutoProibido\Http\Controllers\PartnersController@show | web |
| | PUT|PATCH | partners/{partner} | partners.update | FrutoProibido\Http\Controllers\PartnersController@update | web |
| | DELETE | partners/{partner} | partners.destroy | FrutoProibido\Http\Controllers\PartnersController@destroy | web |
| | GET|HEAD | partners/{partner}/edit | partners.edit | FrutoProibido\Http\Controllers\PartnersController@edit | web |
| | GET|HEAD | pictures | pictures.index | FrutoProibido\Http\Controllers\PicturesController@index | web |
| | POST | pictures | pictures.store | FrutoProibido\Http\Controllers\PicturesController@store | web |
| | GET|HEAD | pictures/create | pictures.create | FrutoProibido\Http\Controllers\PicturesController@create | web |
| | GET|HEAD | pictures/{picture} | pictures.show | FrutoProibido\Http\Controllers\PicturesController@show | web |
| | PUT|PATCH | pictures/{picture} | pictures.update | FrutoProibido\Http\Controllers\PicturesController@update | web |
| | DELETE | pictures/{picture} | pictures.destroy | FrutoProibido\Http\Controllers\PicturesController@destroy | web |
| | GET|HEAD | pictures/{picture}/edit | pictures.edit | FrutoProibido\Http\Controllers\PicturesController@edit | web |
+--------+-----------+-------------------------+------------------+-----------------------------------------------------------+--------------+
我认为这是一种非常奇怪的行为,但也许我只是没有看到什么。
谢谢!
这里的问题大概是这样的:
1) 您定义:
Route::resource('pictures', 'PicturesController');
所以你想得到 运行 例如
http://example.com/pictures
获取图片列表
2) 但是您还在 public
目录中创建了 pictures
目录,所以当您 运行
http://example.com/pictures
服务器将尝试在 public
目录
中显示 pictures
目录的内容
不行。您需要将此 url 用于控制器或 public
目录中的文件。否则你会得到这种奇怪的行为。
更新
为了避免关于 ajax 调用的所有调试和问题,我在控制器中创建了一个只有 echo 'hey!'
的索引方法,并且仍然得到相同的东西:
app.url/blocktest 给我一个 hey
,但更改为 app.url/pictures,注释掉一条路线并取消注释另一条路线给我一个 404
错误.
更新和
我正在使用 laravel(版本 5.4)构建我的第一个应用程序,但是在使用裁剪进行图像上传的过程中,我的路线(最初是照片)开始出现 404 错误,经过数小时的调试我一无所获,所以改变路线,它开始工作,然后再次被封锁,所以我有点困惑,我想我真的没有在这里得到什么。我的实际路线:
Route::resource('partners', 'PartnersController');
//Route::resource('pictures', 'PicturesController');
Route::resource('blocktest', 'PicturesController');
这样一切正常,我的 ajax post 到我的 PicturesController 一切顺利,这是控制器功能:
public function store(Request $request)
{
// echo 'hey';
$requests = request()->file('picture');
foreach ($requests as $picture) {
$filename = time() . '.' . $picture->getClientOriginalExtension();
$path = public_path('pictures/' . $filename);
Image::make($picture->getRealPath())->crop(600, 600)->save($path);
$picture = new Picture;
$picture->partner_id = $request['partner_id'];
$picture->src = $filename;
$picture->save();
}
}
但如果我将路线更改为:
Route::resource('partners', 'PartnersController');
Route::resource('pictures', 'PicturesController');
// Route::resource('blocktest', 'PicturesController')
尝试使用 pictures
并将 ajax 指向新路由,我从 nginx 收到 404。
这是 php artisan route:list
+--------+-----------+-------------------------+------------------+-----------------------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+-------------------------+------------------+-----------------------------------------------------------+--------------+
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | partners | partners.index | FrutoProibido\Http\Controllers\PartnersController@index | web |
| | POST | partners | partners.store | FrutoProibido\Http\Controllers\PartnersController@store | web |
| | GET|HEAD | partners/create | partners.create | FrutoProibido\Http\Controllers\PartnersController@create | web |
| | GET|HEAD | partners/{partner} | partners.show | FrutoProibido\Http\Controllers\PartnersController@show | web |
| | PUT|PATCH | partners/{partner} | partners.update | FrutoProibido\Http\Controllers\PartnersController@update | web |
| | DELETE | partners/{partner} | partners.destroy | FrutoProibido\Http\Controllers\PartnersController@destroy | web |
| | GET|HEAD | partners/{partner}/edit | partners.edit | FrutoProibido\Http\Controllers\PartnersController@edit | web |
| | GET|HEAD | pictures | pictures.index | FrutoProibido\Http\Controllers\PicturesController@index | web |
| | POST | pictures | pictures.store | FrutoProibido\Http\Controllers\PicturesController@store | web |
| | GET|HEAD | pictures/create | pictures.create | FrutoProibido\Http\Controllers\PicturesController@create | web |
| | GET|HEAD | pictures/{picture} | pictures.show | FrutoProibido\Http\Controllers\PicturesController@show | web |
| | PUT|PATCH | pictures/{picture} | pictures.update | FrutoProibido\Http\Controllers\PicturesController@update | web |
| | DELETE | pictures/{picture} | pictures.destroy | FrutoProibido\Http\Controllers\PicturesController@destroy | web |
| | GET|HEAD | pictures/{picture}/edit | pictures.edit | FrutoProibido\Http\Controllers\PicturesController@edit | web |
+--------+-----------+-------------------------+------------------+-----------------------------------------------------------+--------------+
我认为这是一种非常奇怪的行为,但也许我只是没有看到什么。
谢谢!
这里的问题大概是这样的:
1) 您定义:
Route::resource('pictures', 'PicturesController');
所以你想得到 运行 例如
http://example.com/pictures
获取图片列表
2) 但是您还在 public
目录中创建了 pictures
目录,所以当您 运行
http://example.com/pictures
服务器将尝试在 public
目录
pictures
目录的内容
不行。您需要将此 url 用于控制器或 public
目录中的文件。否则你会得到这种奇怪的行为。