2016-09-04 11 views
0

varajとlaravelのモデルとルートをlaravelだけで自動的にバインドする方法があるかどうかを知りたい。 laravelが自動的ことないので、私はポストIDを指定する必要がなかったことLaravel暗黙のモデルルートバインディングとVue JS

public function edit(Request $request Post $post) 
    { 

     $post->update($request->all()); 
    // then I will return some view or do some redirect here 

    } 

お知らせ:私は何を意味することはlaravelで私はこれを行うだろう、私は与えられたIDを持つ特定のポストを更新したい、と仮定すると、あります舞台裏で私はvuejsからいくつかのポストデータと同じ機能を使用して、これまでに学んだことにより、私は最初に以下を実行してIDを取得している

:関数は、任意のポストを受け入れない

public function edit(Request $request) 
    { 

    $post = $request->input('id'); 
    $post = Post::where('id', $id)->first(); 
    // Then I perform other logic here 
    // then I will return some view or do some redirect here 

    } 

お知らせもうモデルはありません。モデルを入力パラメータとして追加し、vuejsの編集機能を呼び出すと、一部のコントローラで編集したルートに到達すると、内部サーバーエラー500が発生します。 コードは次のようになります。

public function edit(Request $request Post $post) 
    { 


    // Then I perform other logic here 
    // then I will return some view or do some redirect here 

    } 


    //vuejs method 
    editPost(post){ 
    var postData = {id: this.post.id}; 
    this.$http.post('edit/'+ postData).then((response)=> 
    { 
    //Some logic goes here including catch part 

    }); 
} 

答えて

1

あなたは、ルートパラメータとしてポストIDを渡すことができます。

Route::get('posts/{post}/edit', '[email protected]'); 

だから、それが自動的にpostパラメータにモデルインスタンスを注入します。

public function edit(Request $request, Post $post) 
{ 
    $post->update($request->all()); 
} 

次に、あなたVUEであなたは次のように行うことができます。

editPost(post) { 
    let postId = post.id; 
    let postData = { 
     title: '', 
     content: '' 
    }; 

    this.$http.post('posts/' + postId + '/edit', postData).then((response) => { 
     //Some logic goes here including catch part 
    }); 
} 
+0

これは動作します。私は1つの問題が残っている、私は投稿の所有者だけが投稿を削除できることを確認する権限メソッドを使用していますが、私は403を取得しています – Mover

+0

あなたがそれを行う権限がないことを意味する403を取得しているとき。ログインしたユーザーが投稿者であることを確認する必要があります。 – Rifki

+0

はい、実際のイベントの所有者とユーザーが一致することをブラウザの開発者ログから確認できます。なぜ私は403を取得するのか分からない – Mover