私はフロントエンドでReactを持つRestAPIとしてLaravelを使用しています。 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
から来ている:私は記載されているGETルートが動作するため
// 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)))
},
api.php
からアクセスAuthController.php
必見のが、二つのPUTとルートをDELETEではありませんワーキング。ワーキングルートは同じミドルウェアを使用しており、認証エラーではなく404エラーが発生します。
api.js
のconsole.loggedには、それぞれのルートが予定されているURLと一致するURLがあります。また、ルートとその対応する機能は、機能するサイトの他の部分に基づいています。唯一の違いは変数です。
コントローラ内で機能を使用するルートは認識できますが、同じコントローラ内の異なる機能を指す別のルートは認識されないのはなぜですか?
システム情報:Laravel 5.4、Php 5.6、Linux MintでApacheを使用してローカルに実行しています。
私は自分のルートで$で小さなテストをしましたが、うまく動作します。 JavaScriptのルートも$で定義されています。 – Rimble
奇妙なことに、$ {id}はいくつかの場所では動作しましたが、他の場所では動作しませんでしたが、これはうまくいきました! –