2016-05-03 5 views
0

私は投稿を見たことがありますが、投稿データを投稿経路に正しく渡していると思うので問題とは関係ありません。ここでLaravel:コントローラを介してデータを渡すとMethodNotAllowedHttpExceptionが発生する

は、関連する経路コードです:

Route::get('/pass', '[email protected]'); 
Route::post('/pass/{request}',['uses' => '[email protected]']); 

私は「パス」のページに1つのコントローラメソッドを持っていると思いますが、私はそれらを分離している問題を特定します。ここ

はPageController.phpに関連する方法である:

public function pass(){ 

    return view('pass')->with(array(
     'title'=>'Create A Pass' 
    )); 



} 
public function passRequest($request){ 
    $data['request'] = $request; 
    $validator = Validator::make($request->all(), [ 
     'studentID' => 'required|max:255', 
     'teacherID' => 'required|max:255', 
     'destination' => 'required|max:255', 
    ]); 
    if ($validator->fails()) { 
     return redirect('/') 
      ->withInput() 
      ->withErrors($validator); 
    } 
    $pass = new Pass; 
    $pass->student = DB::table('users')->where('studentID', $request->studentID)->first()->id; 
    $pass->teacher = DB::table('users')->where('teacherID', $request->teacherID)->first()->id; 
    $pass->destination = $request->destination; 
    $pass->save(); 
    return view('home')->with(array(
     'title'=>'Home', 
     'success'=>'null' 
    )); 
} 

Iメソッドは、コントローラにデータを渡すためにhereを述べました。これは悪い習慣/時代遅れの私は任意の提案に開いている。

これは私がMethodNotAllowedHttpException例外を取得し、このフォームの提出に

<form action="{{ url('pass') }}" method="POST" class="form-horizontal"> 

     {!! csrf_field() !!} 
     <fieldset> 
      <!-- Text input--> 
      <div class="container"> 
       <div class="form-group"> 
        <label class="col-md-4 control-label" for="studentID">Student ID</label> 
        <div class="col-md-3"> 
         <input id="studentID" name="studentID" type="text" class="form-control input-md"> 
        </div> 
       </div> 
      </div> 
      <!-- Text input--> 
      <div class="container"> 
       <div class="form-group"> 
        <label class="col-md-4 control-label" for="teacherID">Teacher ID</label> 
        <div class="col-md-3"> 
         <input id="teacherID" name="teacherID" type="text" class="form-control input-md"> 
        </div> 
       </div> 
      </div> 
      <!-- Text input--> 
      <div class="container"> 
       <div class="form-group"> 
        <label class="col-md-4 control-label" for="destination">Destination</label> 
        <div class="col-md-3"> 
         <input id="destination" name="destination" type="text" class="form-control input-md"> 
        </div> 
       </div> 
      </div> 
      <div class="container"> 
       <div class="form-group"> 
        <div class="col-sm-offset-4 col-sm-6"> 
         <button type="submit" class="btn btn-default"> 
          <i class="fa fa-check"></i> Create Pass 
         </button> 
        </div> 
       </div> 
      </div> 
     </fieldset> 
</form> 

ポストデータを送信するための責任が「パス」ページ内のフォームです。

エラーのスタックトレースが役立つ場合は、私にお知らせください。スタイルに関する提案があれば、私はそれにも開放しています。

答えて

2

このフォームタグはURL /passにPOSTリクエストを生成します。

<form action="{{ url('pass') }}" method="POST" class="form-horizontal"> 

あなたのルートファイルがそれを許可していません。このURLへのGETリクエストのみ許可しますが、POSTリクエストは/pass/{request}になります。

コピー/ペーストの間違いでPOSTルートが[email protected]メソッドを呼び出すように設定されていますが、コントローラから共有したメソッドの名前がpassRequestであるかどうかはわかりません。それらも一致する必要があります。

+0

ありがとうございます。私はルーティングプロセス全体を理解し始めていると思います。私はgetメソッドと{request}変数を接続することを忘れました。私がやっていたことを理解するのではなく、サンプルコードをコピーして貼り付け、それをその目的のために使用していました。私はそれがまだ働いているとは言えません、少なくともこの問題は解決されました。 – Damen

2

Jeff Lambertが指摘したことに加えて、{request}変数をルートに配置しないでください。

これを削除し、laravelにRequestオブジェクトを注入させてください。

Requestクラスをまだインポートしていない場合は、インポートしてください。

use Illuminate\Http\Request; 

そして、あなたの機能を使用すると、URLを通過するための追加のパラメータを持っている場合は、あなたがルートに追加し、引数を追加することがあり、次の...

public function passRequest(Request $request) 
{ 
    ... 
} 

のようになります。方法はRequest $requestの後です。ララヴェルはそれをどうするかを考え出すでしょう。

+0

この回答は、実際に経路のURLにその{request}変数の理由を結びつけるのに役立ちました。もちろん、それはgetのためだけです、なぜそれが応答を得るのですか。私のコードではまだいくつかの問題を解決していますが、これは本当に私がドットを結ぶのを助けました。ありがとうございました! – Damen

関連する問題