112

私は非常に基本的なものを実行しようとしています。私は CI に慣れており、現在は Laravel 4 を学んでいますが、彼らのドキュメントでは簡単ではありません! とにかく、私はログインフォームを作成しようとしています.次のフォームに印刷して、データが正常に投稿されていることを確認してください. この例外が発生しています:

symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException

と私の MemberController.php:

    public function index()
    {
        if (Session::has('userToken'))
        {
            /*Retrieve data of user from DB using token & Load view*/
            return View::make('members/profile');
        }else{
            return View::make('members/login');
        }
    }

    public function validateCredentials()
    {
        if(Input::post())
        {
            $email = Input::post('email');
            $password = Input::post('password');
            return "Email: " . $email . " and Password: " . $password;
        }else{
            return View::make('members/login');
        }
    }

およびルートには次のものがあります。

Route::get('/', function()
{
    return View::make('hello');
});

Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');

最後に、私のビュー login.php には次のフォームの方向があります。

<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>

どんな助けでも大歓迎です。

4

19 に答える 19

200

GETルートに投稿しているため、そのエラーが発生しています。

ルーティングをvalidateGETPOSTルートに分割します。

新しいルート:

Route::post('validate', 'MemberController@validateCredentials');

Route::get('validate', function () {
    return View::make('members/login');
});

次に、コントローラーメソッドは次のようになります

public function validateCredentials()
{
    $email = Input::post('email');
    $password = Input::post('password');
    return "Email: " . $email . " and Password: " . $password;
}
于 2013-11-04T13:29:16.457 に答える
27

私の疑いでは、問題はルート定義にあります。

ルートをリクエストとして定義しましたGETが、フォームはおそらくPOSTリクエストを送信しています。フォームのリクエスト メソッドに一致するようにルート定義を変更します。

Route::post('/validate', [MemberController::class, 'validateCredentials']);

一般に、名前付きルートを使用することをお勧めします (コントローラーのメソッド/クラスが変更された場合のスケーリングに役立ちます)。

Route::post('/validate', [MemberController::class, 'validateCredentials'])
    ->name('member.validateCredentials');

ビューで、検証ルートをフォームのアクションとして使用します。

<form action="{{ route('member.validateCredentials') }}" method="POST">
  @csrf
...
</form>
于 2013-11-04T06:18:32.290 に答える
23

問題はあなたが使用していることですがPOST、実際には実行する必要がありPATCH ます この追加を修正するには

<input name="_method" type="hidden" value="PATCH">

Form::modelラインの直後

于 2016-09-25T10:07:42.770 に答える
12

私もこの問題に遭遇し、ここでの他の回答は役に立ちましたが、私は、、およびその他のリクエストを処理する を使用してRoute::resourceいます。GETPOST

私の場合、ルートをそのまま残しました:

Route::resource('file', 'FilesController');

storeそして、私のフォームを変更して、私の関数に送信するだけですFilesController

{{ Form::open(array('route' => 'file.store')) }}

POSTこれで問題は解決しました。他のさまざまな回答が新しいルートの追加を提案しているため、別の回答として指摘する価値があると思いました。これはオプションですが、必須ではありません。

于 2014-09-05T19:35:50.480 に答える
10

通常MethodNotAllowedHttpException、次の場合に発生します。

ルート メソッドが一致しません。

POSTリクエスト ルート ファイルを定義GETして、ルートにリクエストを送信するとします。

于 2018-10-11T19:03:05.723 に答える
4

私はエラーに直面しました、
問題はFORM METHODでした

{{ Form::open(array('url' => 'admin/doctor/edit/'.$doctor->doctor_id,'class'=>'form-horizontal form-bordered form-row-stripped','method' => 'PUT','files'=>true)) }}

このようになるはずです

{{ Form::open(array('url' => 'admin/doctor/edit/'.$doctor->doctor_id,'class'=>'form-horizontal form-bordered form-row-stripped','method' => 'POST','files'=>true)) }}
于 2014-11-16T05:42:49.540 に答える
3

通常、使用される HTTP 動詞には誤りがあります。たとえば、次のようになります。

リクエストによるPUTルートの呼び出しPOST

于 2016-06-21T16:26:30.193 に答える
2

私も同じエラーがありましたが、別の修正がありましXYZ.blade.phpた。

{!! Form::open(array('ul' => 'services.store')) !!}

エラーが発生しました-理由はまだわかりません-しかし、変更したとき

{!! Form::open(array('route' => 'services.store')) !!}

出来た!

共有する価値があると思いました:)

于 2016-06-11T21:03:33.880 に答える
0

ここrebduvidが回答したように、以下のようにRoute::matchを使用できます

Route::match(['get', 'post'], 'results',[
        'as' => 'results_path',
        'uses' => 'SearchController@results' ]);

ロジックに従ってパラメーターを更新します

于 2021-04-07T10:44:16.607 に答える
0

これらの問題が発生したとき、2つのコードエラーに直面しました

{!! Form::model(['method' => 'POST','route' => ['message.store']]) !!}

私はこれを行うことでそれを修正しました

{!! Form::open(['method' => 'POST','route' => 'message.store']) !!}

そのため、単に説明するために、フォームmodelをに変更しopen、角かっこで間違って配置されたルートも変更しました。

于 2017-12-05T15:31:24.037 に答える