我在前端使用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進行本地運行。
我剛在我的路線中做了一個小測試$,他們工作得很好。 javascript中的路由也用它們中的$定義。 – Rimble
奇怪的$ {id}在一些地方工作,但不是其他.....但這工作! –