2017-08-29 11 views
0

私はフロントエンドで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を使用してローカルに実行しています。

答えて

1

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' 
]); 

あなたはまたiddeleteEventにメソッドを渡すことになるでしょう。

また、implicit bindingsを見て、あなたのEventsを自動的に解決することができます。

+0

私は自分のルートで$で小さなテストをしましたが、うまく動作します。 JavaScriptのルートも$で定義されています。 – Rimble

+0

奇妙なことに、$ {id}はいくつかの場所では動作しましたが、他の場所では動作しませんでしたが、これはうまくいきました! –

関連する問題