只有一些Laravel路由器在控制器上工作
问题描述:
我在前端使用Laravel作为RestAPI和React。 GET路径起作用,但在同一个控制器中,PUT和DELETE路由不会。只有一些Laravel路由器在控制器上工作
以下是api.php
中指定的路线。此文件中的其他(未列出)路由也起作用。
// works
Route::get('unapproved', [
'uses' => '[email protected]',
'middleware' =>'auth.jwt'
]);
// doesn't work (404 error)
Route::put('unapproved/${id}', [
'uses' => '[email protected]',
'middleware' =>'auth.jwt'
]);
// doesn't work (404 error)
Route::delete('unapproved/${id}', [
'uses' => '[email protected]',
'middleware' =>'auth.jwt'
]);
这里是AdminController.php
。还有一些我没有列出的工作控制器。
class AdminController extends Controller
{
// works
public function indexEvents() // works
{
return Event::where('approved', 0)->get();
}
// not recognized by api.php
public function approveEvent(Request $request, $id)
{
echo $request; // for testing purposes
}
// not recognized by api.php
public function deleteEvent()
{
$event = Event::find($id);
$event->delete();
return response()->json(null, 204);
}
}
API请求从auth.js
来,而其他请求工作:
// works
getEvents: (token) => {
const url = `api/unapproved?token=${token}`
return new Promise((resolve, reject) => axios.get(url)
.then(res => resolve(res.data))
.catch(err => reject(err)))
},
// doesn't work
approveEvent: (token, event, id) => {
const url = `api/unapproved/${id}?token=${token}`
return new Promise((resolve, reject) => axios.put(url, event)
.then(res => resolve(res.data))
.catch(err => reject(err)))
},
// doesn't work
deleteEvent: (token, id) => {
const url = `api/unapproved/${id}?token=${token}`
return new Promise((resolve, reject) => axios.delete(url)
.then(res => resolve(res.data))
.catch(err => reject(err)))
},
的的AuthController.php
必须访问从api.php
因为GET路线的作品,但两人PUT和DELETE路线我列出了不加工。工作路线使用相同的中间件,我得到404错误,而不是验证错误。
我在console.logged api.js
URLs每个路线将要和他们匹配的预期。此外,路线及其相应的功能基于工作的其他部分 - 唯一的区别是变量。
为什么它会识别一些使用控制器内功能的路由,而不是指向同一控制器内不同功能的其他路由的任何原因?
系统信息:Laravel 5.4,PHP 5.6,在Linux Mint上使用Apache进行本地运行。
答
你的内Laravel的路线是不正确的,你需要的绑定之前删除$
:
// doesn't work (404 error)
Route::put('unapproved/{id}', [
'uses' => '[email protected]',
'middleware' =>'auth.jwt'
]);
// doesn't work (404 error)
Route::delete('unapproved/{id}', [
'uses' => '[email protected]',
'middleware' =>'auth.jwt'
]);
你也想通过id
到deleteEvent
方法。
我还会看看implicit bindings,它可以自动解析您的Events
。
我刚在我的路线中做了一个小测试$,他们工作得很好。 javascript中的路由也用它们中的$定义。 – Rimble
奇怪的$ {id}在一些地方工作,但不是其他.....但这工作! –