2017-12-21 7 views
2

안녕하세요 저는 아직 laravel에 익숙하지 않고 웹에서이 문제에 대해 거의 3 시간 동안 검색했지만 많은 시도를했지만 작동하지 않았습니다.Laravel : 버튼 클릭시 열의 값 업데이트

기본적으로 버튼이있는 페이지가 있는데 "승인"값을 0에서 1로 업데이트하려고합니다 (열은 부울 유형 임). 이 내 컨트롤러 :

{!!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()!!} 

및 경로 (내 생각 :

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"가 버튼으로 페이지 섹션이다

:

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

버튼을 클릭하면 내가 오류는 이것이다 : 이것은 내가 잘못 부분)입니다

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

을 또는 :

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

을 또한 추가 할 필요가

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException 

는 경로가 post이기 때문에, 당신이 너무 게시 할 양식 방법을 변경해야합니다 당신의 도움이

답변

1

주셔서 감사합니다 경로 정의에 id :

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

: 형식 오류 : "App \ Http \ Controllers \ TrainingsController :: approve() 함수의 인수가 너무 적습니다. 0이 전달되고 정확히 1이 될 것입니다."그러나 TrainingsID를 올바르게 부여하고 있습니까? 그래서 난 이해가 안 돼 –

+0

@AbdelKdj 제 대답의 두 번째 부분을 읽어주십시오. 경로를 변경 했습니까?또한,'return redirect ('/ trainings')'로 리다이렉트하고 있으므로 다른 경로가 필요하거나'return redirect ('trainings /'. $ id)'처럼 ID를 전달하기를 원합니다. –

+0

미안 해요. 알았어. 알았어, 컨트롤러의 업데이트 방법에 대한 오류 확인 메시지가 표시 되었어. 지금 혼란스러워서 테이블을 업데이트하지 않는다./ –

0

POST 작업을 사용하고 있으므로 스푸핑 방법이 필요하지 않습니다. PUT, PATCH, DELETE에만 필요합니다.

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에 테이블/속성 이름
  • 실제로 당신이 옳은 것하지만 지금이 오류가