Laravel: apiResouce 路由未找到问题
Laravel: apiResouce route not found issue
在我的 laravel 应用程序中,我使用 apiResponse
作为路由。但是,在发出 api 请求时,我收到 404 not found
错误。这是一个例子:
Route::group(['prefix' => 'v1'], function() {
/**
* Categories
*/
Route::group([ 'prefix' => 'categories' ], function() {
Route::apiResource('/', 'v1\CategoryController')->except(['destroy', 'show']);
Route::get('/edit/{category}', 'v1\CategoryController@edit');
// Route::patch('/{category}', 'v1\CategoryController@update');
Route::patch('/status/{category}/{status}', 'v1\CategoryController@status');
});
});
当我通过 patch
方法访问 update
api 时,它 returns 404 not found
CategoryController.php
...
use Illuminate\Http\Request;
use App\ApiModels\v1\Category;
class CategoryController extends Controller
{
...
public function update(Request $Request, $category)
{
# models
$Category = new Category();
# accessing methods
if(($querySubmit = $Category->update($Request->all(), $category))['success'] == false)
{
return $this->response([
'class' => 'alert-danger'
], false, $this->parentErrors($querySubmit));
}
return $this->response([], true, 'Category has been saved successfully.');
}
...
}
但是,如果我取消注释 update
路由的 patch
方法,它就会开始工作。因为它开始使用新路由,完全忽略 restful 控制器路由。
我不想包含额外的代码,特别是为了 laravel 已经给出的相同功能。
如何解决这个问题...?
请帮忙,谢谢。
resource
和 apiResource
方法用于资源。您没有传递资源名称,从技术上讲,这是应该传递给它们的名称,也没有传递以资源名称结尾的 URI。你可能想要这样的东西:
Route::group(['prefix' => 'v1', 'namespace' => 'v1'], function() {
Route::patch('categories/{category}/{status}', 'CategoryController@status');
Route::resource('categories', 'CategoryController')
->except(['destroy', 'show', 'create']);
});
那么你的路线将是:
GET api/v1/categories index
POST api/v1/categories store
GET api/v1/categories/{category}/edit edit
PUT/PATCH api/v1/categories/{category} update
你想要 edit
路线意味着你可能想使用 resource
而不是 apiResource
并且只排除你不想要的那些
在我的 laravel 应用程序中,我使用 apiResponse
作为路由。但是,在发出 api 请求时,我收到 404 not found
错误。这是一个例子:
Route::group(['prefix' => 'v1'], function() {
/**
* Categories
*/
Route::group([ 'prefix' => 'categories' ], function() {
Route::apiResource('/', 'v1\CategoryController')->except(['destroy', 'show']);
Route::get('/edit/{category}', 'v1\CategoryController@edit');
// Route::patch('/{category}', 'v1\CategoryController@update');
Route::patch('/status/{category}/{status}', 'v1\CategoryController@status');
});
});
当我通过 patch
方法访问 update
api 时,它 returns 404 not found
CategoryController.php
...
use Illuminate\Http\Request;
use App\ApiModels\v1\Category;
class CategoryController extends Controller
{
...
public function update(Request $Request, $category)
{
# models
$Category = new Category();
# accessing methods
if(($querySubmit = $Category->update($Request->all(), $category))['success'] == false)
{
return $this->response([
'class' => 'alert-danger'
], false, $this->parentErrors($querySubmit));
}
return $this->response([], true, 'Category has been saved successfully.');
}
...
}
但是,如果我取消注释 update
路由的 patch
方法,它就会开始工作。因为它开始使用新路由,完全忽略 restful 控制器路由。
我不想包含额外的代码,特别是为了 laravel 已经给出的相同功能。
如何解决这个问题...?
请帮忙,谢谢。
resource
和 apiResource
方法用于资源。您没有传递资源名称,从技术上讲,这是应该传递给它们的名称,也没有传递以资源名称结尾的 URI。你可能想要这样的东西:
Route::group(['prefix' => 'v1', 'namespace' => 'v1'], function() {
Route::patch('categories/{category}/{status}', 'CategoryController@status');
Route::resource('categories', 'CategoryController')
->except(['destroy', 'show', 'create']);
});
那么你的路线将是:
GET api/v1/categories index
POST api/v1/categories store
GET api/v1/categories/{category}/edit edit
PUT/PATCH api/v1/categories/{category} update
你想要 edit
路线意味着你可能想使用 resource
而不是 apiResource
并且只排除你不想要的那些