2017-12-21 20 views
2

こんにちは私はまだlaravelには新しく、この問題については約3時間ウェブを検索していますが、私は多くのことを試みましたが動作しませんでした。Laravel:ボタンクリック時のカラムの値を更新する

基本的に、私はそのボタンをクリックすると、ボタンが付いたページを持っています。 "Approve"値を0から1に更新したい(その列はブール型です)。 これは私のコントローラである:

public function approve($id){ 
    $training = Training::find($id); 
    $training->update(['Approved' =>'1']); 


    // $training->Approved = 1; 
    // $training->save(); 
    return redirect('/trainings')->with('success', 'Training Approved'); 
} 

これは、それがフォルダ研修中だと名「show.blade.php」を持っているボタンでページのセクションです:

{!!Form::open(['action' => ['[email protected]',$training->TrainingsID], 'method' => 'POST','class' => 'pull-left'])!!} 
      {{Form::hidden('_method','PUT')}} 
      {{Form::submit('Approve',['class' => 'btn btn-success'])}} 

    {!!Form::close()!!} 

とルート(私は推測します

Route::post('/trainings',['as' =>'trainings.show', 'uses' => '[email protected]']); 

ボタンをクリックしたときに私が手にエラーがこれです:これは私が間違ってやっている部分)であります

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException 

はルートがpostあるので、あなたも投稿するフォームメソッドを変更する必要がありますあなたの助け

答えて

1

ありがとう:

{{ Form::hidden('_method','POST') }} 

または:

{!! Form::open(['method' => 'post', 'action' => .... 

あなたはまた、追加する必要がありますルート定義へのid

Route::post('trainings/{id}', ['as' => 'trainings.show', 'uses' => '[email protected]']); 
+0

:タイプエラー: "App \ Http \ Controllers \ TrainingsController :: approve()関数の引数が少なすぎると0が返され、正確に1が期待されます"しかし、私はTrainingingsIDを正しく与えていますか?だから私は理解していない –

+0

@AbdelKdj私の答えの2番目の部分をお読みください。あなたはルートを変更しましたか?また、 'return redirect( '/ trainings')'にリダイレクトしているので、別のルートが必要な場合や、 'return redirect( 'trainings /'。$ id)'のようにIDを渡したい場合もあります。 –

+0

申し訳ありませんが表示されませんでした。現在、コントローラーの更新メソッドのエラー検証メッセージが表示されます。ちょっと混乱していて、テーブルも更新されません。/ –

0

POSTアクションを使用しているので、ここではなりすましをする必要はありません。そのために必要なのはPUTPATCHDELETEです。

trainings/showapproveアクションを接続するため、現在のルート定義が間違っています。実際にはshowアクションである必要があります。

これは動作するはずのコード(未テスト)

class TrainingsController extends Controller 
{ 
    public function show(Training $training) // Using Route Model binding here 
    { 
     return view('trainings.show', ['training' => $training]); 
    } 

    public function approve(Training $training) 
    { 
     $training->update(['Approved' => '1']); 

     return redirect()->route('trainings')->with('success', 'Training Approved'); // if you want to redirect to a list of all trainings and would need an index action 
     // return redirect()->route('trainings', ['training' => $training])->with('success', 'Training Approved'); // if you want redirect to detail page of this training 
    } 
} 

ルート/ web.php

Route::post('trainings/{training}/approve', ['as' => 'trainings.approve', 'uses' => '[email protected]']); 
Route::get('trainings/{training}', ['as' => 'trainings.show', 'uses' => '[email protected]']); 

ブレード

{!!Form::open('route' => ['trainings.approve', $training->TrainingsID], 'class' => 'pull-left'])!!} 
    {{Form::submit('Approve',['class' => 'btn btn-success'])}} 
{!!Form::close()!!} 

あなたのコードのいくつかの発言です:

  • すでに知っているので、TrainingsIDのようなIDが冗長では、トレーニングのIDであるモデル/ DBフィールドの
  • スティックsnake_caseにテーブル/属性の名前
  • 確かにあなたは正しいが、今、私はこのエラーを取得する
関連する問題