Подтвердить что ты не робот

Laravel throwing MethodNotAllowedHttpException

Я пытаюсь получить что-то очень простое. Я привык к 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', '[email protected]');
Route::get('/validate', '[email protected]');

и, наконец, мой вид login.php имеет это направление формы:

<?php echo Form::open(array('action' => '[email protected]')); ?>

Любая помощь будет принята с благодарностью.

4b9b3361

Ответ 1

Вы получаете эту ошибку, потому что отправляете по маршруту GET.

Я бы разделил ваш маршрут для validate на отдельные маршруты GET и POST.

Новые маршруты:

Route::post('validate', '[email protected]');

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;
}

Ответ 2

Я подозреваю, что проблема заключается в определении вашего маршрута.

Вы определили маршрут как запрос GET, но форма, вероятно, отправляет запрос POST. Измените определение маршрута.

Route::post('/validate', '[email protected]');

Как правило, лучше использовать именованные маршруты (помогает масштабировать при изменении метода/класса контроллера).

Route::post('/validate', array(
    'as' => 'validate',
    'uses' => '[email protected]'
));

В форме используйте следующее

<?php echo Form::open(array('route' => 'validate')); ?>

Ответ 3

Проблема в том, что вы используете POST, но на самом деле вы должны выполнить PATCH Чтобы это исправить, добавьте

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

Сразу после строки Form::model

Ответ 4

Я также столкнулся с этой проблемой, и другие ответы здесь были полезны, но я использую Route::resource, который заботится о GET, POST и других запросах.

В моем случае я оставил свой маршрут как есть:

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

И просто изменил мою форму для отправки в функцию store в моем FilesController

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

Это устранило проблему, и я подумал, что стоит указать в качестве отдельного ответа, поскольку различные другие ответы предлагают добавить новый маршрут POST. Это вариант, но это не обязательно.

Ответ 5

Это потому, что вы публикуете данные в маршрут GET.

Route::get('/validate', '[email protected]');

попробуйте это

Route::post('/validate', '[email protected]');

Ответ 6

Обычно MethodNotAllowedHttpException происходит, когда

Метод маршрута не совпадает.

Предположим, вы определяете файл маршрута запроса POST, но отправляете запрос маршрута GET.

Ответ 7

<?php echo Form::open(array('action' => '[email protected]')); ?>

по умолчанию Form::open() предполагает метод POST.

у вас есть GET в ваших маршрутах. замените его на POST на соответствующем маршруте.

или если вы хотите использовать метод GET, добавьте параметр method.

например,

Form::open(array('url' => 'foo/bar', 'method' => 'get'))

Ответ 8

Я столкнулся с ошибкой,
проблема была в методе форм

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

Ответ 9

В моем случае я отправлял запрос POST через HTTP на сервер, где я настроил Nginx для перенаправления всех запросов на порт 80 на порт 443, где я обслуживал приложение через HTTPS.

Выполнение запроса к правильному порту напрямую устранило проблему. В моем случае все, что мне нужно было сделать, это заменить http:// в URL-адресе запроса на https://, поскольку я использовал порты по умолчанию 80 и 443 соответственно.

Ответ 10

Как правило, существует ошибка в используемом глаголе HTTP, например:

Вызов маршрута PUT с запросом POST

Ответ 11

Моя проблема была не в том, что мои маршруты были настроены неправильно, а в том, что я ссылался на неправильный метод Form (который я скопировал из другой формы). Я делал...

{!! Form::model([ ... ]) !!}

(без указания модели). Но я должен был использовать обычный метод open...

{!! Form::open([ ... ]) !!}

Поскольку первый параметр, который model ожидает реальной модели, он не получал ни одного из моих параметров, которые я указывал. Надеюсь, это поможет кому-то, кто знает, что их маршруты верны, но что-то еще не так.

Ответ 12

У меня также была та же ошибка, но у меня было другое исправление, в моем XYZ.blade.php у меня было:

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

который дал мне ошибку, - я все еще не знаю why-, но когда я изменил ее на

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

Это сработало!

Я думал, что стоит поделиться :)

Ответ 13

хорошо, когда у меня были эти проблемы, я столкнулся с 2 ошибками кода

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

я исправил это, сделав это

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

так что просто для расширения я изменил model формы, чтобы open а также маршрут, где неправильно размещены в квадратных скобках.

Ответ 14

Laravel иногда не поддерживает {!! Form::open(['url' => 'posts/store']) !!} {!! Form::open(['url' => 'posts/store']) !!} по соображениям безопасности. Вот почему произошла ошибка. Вы можете решить эту ошибку, просто заменив приведенный ниже код

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




Код ошибки {!! Form::open(['url' => 'posts/store']) !!} {!! Form::open(['url' => 'posts/store']) !!}

Правильный код {!! Form::open(array('route' => 'posts.store')) !!} {!! Form::open(array('route' => 'posts.store')) !!}

Ответ 15

В моем случае это было потому, что моя форма отправлялась по маршруту с другим промежуточным программным обеспечением. Поэтому он заблокирован от отправки информации по этому конкретному маршруту.

Ответ 16

В Laravel 5.7 или позже

шаги:

  1. Перейдите в \app\Http\Middleware\VerifyCsrfToken.
  2. Добавьте ваш URL в виде строки в $, кроме.

Пример:

protected $except = [
    '/your-url-withput-csrf-token'
];

Ответ 17

// not done
Route::post(''/posts/{id}'', '[email protected]')->name('posts.store');

return redirect(''/posts'')->with('status','Post was created !');

// done
Route::post(''/posts'', '[email protected]')->name('posts.store');

return redirect(''/posts'')->with('status','Post was created !');