Я пытаюсь получить что-то очень простое. Я привык к 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')); ?>
Любая помощь будет принята с благодарностью.
Вы получаете эту ошибку, потому что вы отправляете POST на маршрут GET.
Я бы разделил вашу маршрутизацию для "проверки" на отдельные маршруты GET и POST. Новые маршруты:
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;
}
Проблема в том, что вы используете POST, но на самом деле вам нужно выполнить PATCH Чтобы исправить это, добавьте
<input name="_method" type="hidden" value="PATCH">
Сразу после формы:: model line
{{ method_field('PATCH') }}
в своем шаблоне.
Мое подозрение заключается в том, что проблема заключается в определении маршрута. Вы определили маршрут как запрос "получить", но форма, вероятно, отправляет запрос "post". Измените определение маршрута.
Route::post('/validate', 'MemberController@validateCredentials');
Как правило, лучше использовать именованные маршруты (помогает масштабировать, если изменяется метод/класс контроллера).
Route::post('/validate', array('as' => 'validate',
'uses' => 'MemberController@validateCredentials'));
В форме используйте следующие
<?php echo Form::open(array('route' => 'validate')); ?>
Я столкнулся с этой проблемой, и другие ответы здесь были полезными, но я использую Route::resource
, который заботится о GET
, POST
и других запросах.
В моем случае я оставил свой маршрут, как есть:
Route::resource('file', 'FilesController');
И просто изменил мою форму, чтобы отправить функцию store
в мой FilesController
{{ Form::open(array('route' => 'file.store')) }}
Это устранило проблему, и я подумал, что стоит упомянуть как отдельный ответ, так как различные другие ответы предлагают добавить новый маршрут POST
. Это вариант, но это необязательно.
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
по умолчанию, Form::open()
принимает метод POST
.
вы попадаете на свои маршруты. измените его на POST
в соответствующем маршруте.
или если вы хотите использовать метод get, добавьте параметр method
.
например.
Form::open(array('url' => 'foo/bar', 'method' => 'get'))
Я столкнулся с ошибкой,
проблема была ФОРМОВЫЙ МЕТОД
{{ 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)) }}
Как правило, в используемом HTTP-глаголе есть ошибка, например: Вызов маршрута PUT с запросом POST
Я также имел ту же ошибку, но имел другое исправление, в моем XYZ.blade.php i:
"{!! Form:: open (array ('url' = > 'services.store'))!!}", который дал мне ошибку, - я все еще не понимаю почему, но когда я изменил это "{!! Форма:: open (массив ('route' = > 'services.store'))!!}" Это сработало!
Я думал, что стоит поделиться:)
Моя проблема не в том, что мои маршруты были настроены неправильно, но я ссылался на неправильный метод Form
(который я скопировал из другой формы). Я делал...
{!! Form::model([ ... ]) !!}
(без указанной модели). Но я должен был бы использовать обычный метод open
...
{!! Form::open([ ... ]) !!}
Поскольку первый параметр model
ожидает фактическую модель, он не получил никаких моих опций, которые я указывал. Надеюсь, это поможет кому-то, кто знает, что их маршруты правильные, но что-то еще не так.
Хорошо, когда я столкнулся с этой проблемой, я столкнулся с 2-мя ошибками кода
{!! Form::model(['method' => 'POST','route' => ['message.store']]) !!}
я исправил это, сделав это
{!! Form::open(['method' => 'POST','route' => 'message.store']) !!}
поэтому просто для расширения я изменил форму model
на open
, а также маршрут, где неправильно помещены квадратные скобки.
url
вы получаете ошибку?php artisan dump-autoload
?