Я пытаюсь получить что-то очень простое. Я привык к 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')); ?>
Любая помощь будет высоко оценена.
Вы получаете эту ошибку, потому что вы отправляете сообщение на маршрут GET
.
Я бы разделил вашу маршрутизацию для validate
на отдельные маршруты GET
и POST
.
Новые маршруты:
Маршрут :: post ('validate', 'MemberController @ validateCredentials') ;
Route :: get ('validate', function () {
return View :: make ('members / login') ;
});
Тогда ваш метод контроллера может быть просто
проверка общедоступной функцииCredentials ()
{
$ email = Input :: post ('email') ;
$ password = Input :: post ('password') ;
вернуть «Электронная почта:» . $ Электронная почта . "и пароль:" . $ пароль;
}
Я подозреваю, что проблема заключается в определении вашего маршрута.
Вы определили маршрут как запрос GET
, но форма, вероятно, отправляет запрос POST
. Измените определение маршрута.
Маршрут :: post ('/ validate', 'MemberController@validateCredentials') ;
Обычно лучше использовать именованные маршруты (помогает масштабировать, если метод / класс контроллера изменяется).
Маршрут :: post ('/ validate', array (
'as' = > 'подтвердить'
'использует' = > «MemberController @ validateCredentials»
));
В форме используйте следующее
& Лт;?fp echo Form :: open (array ('route' = > 'validate')) ; ?>
Я также столкнулся с этой проблемой, и другие ответы здесь были полезны, но я использую Route :: resource
, который заботится о GET
, POST
и других запросах.
В моем случае я оставил свой маршрут как есть:
Маршрут :: resource ('file', 'FilesController') ;
И просто изменил мою форму, чтобы перейти к функции store
в моем FilesController
{{Form :: open (array ('route' = > 'file.store'))}}
Это решило проблему, и я подумал, что стоит указать в качестве отдельного ответа, поскольку различные другие ответы предлагают добавить новый маршрут POST
. Это вариант, но он не нужен.
Это потому, что вы публикуете данные на маршруте GET
.
Маршрут :: get ('/ validate', 'MemberController @ validateCredentials') ;
попробуй это
Маршрут :: post ('/ validate', 'MemberController@validateCredentials') ;
Обычно MethodNotAllowedHttpException
происходит, когда
метод маршрута не совпадает.
Предположим, вы определяете файл маршрута запроса POST
, но отправляете запрос GET
на маршрут.
& Лт;?fp echo Form :: open (array ('action' = > 'MemberController@validateCredentials')) ; ?>
по умолчанию Form :: open ()
принимает метод POST
.
у вас есть GET
в ваших маршрутах. измените его на POST
в соответствующем маршруте.
или если вы хотите использовать метод GET
, добавьте параметр method
.
например.
Форма :: open (array ('url' = > 'foo / bar', 'method' = > 'get'))
В моем случае я отправлял запрос POST
через HTTP
на сервер, на котором я настроил Nginx
, чтобы перенаправить все запросы на порт 80
на порт 443
, где я обслуживал приложение через HTTPS
.
Запрос на правильный порт напрямую исправил проблему. В моем случае все, что мне нужно было сделать, это заменить http://
в URL-адресе запроса на https://
, поскольку я использовал порты по умолчанию 80
и 443
соответственно.
Я столкнулся с ошибкой проблема была МЕТОД ИНФОРМАЦИИ
{{Form :: open (array ('url' = > 'admin / doctor / edit /'.$ doctor- > doctor_id, 'class' = > 'форма-горизонтальная форма-полосатая форма-строка', 'method' = > 'PUT', 'files' = > true))}}
Так должно быть
{{Form :: open (array ('url' = > 'admin / doctor / edit /'.$ doctor- > doctor_id, 'class' = > 'форма-горизонтальная форма-полосатая форма-строка', 'method' = > 'POST', 'files' = > true))}}
Как правило, в используемом глаголе HTTP есть ошибка, например:
Вызов маршрута PUT
с запросом POST
У меня также была та же ошибка, но у меня было другое исправление в моем XYZ.blade.php
:
{!! Форма :: open (array ('ul' = > 'services.store')) !!}
что дало мне ошибку, - я до сих пор не знаю почему, - но когда я изменил ее на
{!! Форма :: open (array ('route' = > 'services.store')) !!}
Это сработало!
Я думал, что стоит поделиться :)
Моя проблема заключалась не в том, что мои маршруты были настроены неправильно, а в том, что я ссылался на неправильный метод «Формы» (который я скопировал из другой формы). Я делал...
{!! Форма :: модель ([ ... ]) !!}
(без указанной модели). Но я должен был использовать обычный метод «открытого»...
{!! Форма :: open ([ ... ]) !!}
Поскольку первый параметр «модели» ожидает реальной модели, я не указывал ни одного из моих параметров. Надеюсь, это поможет тому, кто знает, что их маршруты верны, но что-то еще не так.
хорошо, когда у меня была эта проблема, я столкнулся с двумя кодовыми ошибками
{!! Form::model(['method' => 'POST','route' => ['message.store']]) !!}
я исправил это, сделав это
{!! Form::open(['method' => 'POST','route' => 'message.store']) !!}
поэтому, чтобы просто удалить, я изменил форму «модель» на «открытый», а также маршрут, где ошибочно помещают в квадратные скобки.
Ларавель иногда не поддерживает {!! Форма :: open (['url' = > 'posts / store']) !!}
по соображениям безопасности. Вот почему произошла ошибка. Вы можете решить эту ошибку, просто заменив приведенный ниже код
{!! Form::open(array('route' => 'posts.store')) !!}
< br / > < br / > < br / >
Код ошибки {!! Форма :: open (['url' = > 'posts / store']) !!}
< br / > < br / > правильный код {!! Форма :: open (array ('route' = > 'posts.store')) !!}
В моем случае это было потому, что моя форма отправлялась на маршрут с другим промежуточным программным обеспечением. Таким образом, он заблокировал отправку информации по этому конкретному маршруту.
// не сделано
Маршрут :: post ('` / posts / {id}`', 'PostsController @ store') - > name ('posts.store') ;
return redirect ('` / posts'`) - > ('status', 'Post был создан !«);
// сделано
Маршрут :: post ('` / posts`', 'PostsController @ store') - > name ('posts.store') ;
return redirect ('` / posts'`) - > ('status', 'Post был создан !«);