2013-06-02 2 views
3

Новое в Laravel 4. Я создал форму внутри шаблона клинка, и я следую за snippet from, в котором говорится, что вы можете указать действие формы на метод контроллера, используя 'Форма :: open (массив (' action '=>' Controller @ method '))'. Я создал новый контроллер под названием UserController с мастером и создал новый метод в контроллере с именем userLogin(). Когда я указываю на этот метод при открытии формы, я получаю сообщение об ошибке «InvalidArgumentException, Unknown action». Если я настрою действие open, чтобы указать на UserController @ index, все будет хорошо. Я запустил автозагрузку компоновщика, но проблема остается.Форма открытого для контроллера метода - «Неизвестное действие»

фрагмент login.blade.php:

{{ Form::open(array('action' => '[email protected]')) }} 

фрагмент UsersController.php:

public function userLogin() 
{ 
// 
} 

Может кто-нибудь сказать мне, если я что-то не хватает?

Спасибо всем. Добавление следующих строк в routes.php решен вопрос:

Route::post('login', '[email protected]'); 
+0

Можете ли вы показать, как вы маршрутизации к этому контроллеру? Используете ли вы 'Route :: controller' или' Route :: get' для рассматриваемого метода? –

+0

В ядре Laravel исключение, которое _should_ должно быть брошено, - это «throw new InvalidArgumentException» («Неизвестное действие [$ action].»); '. Похоже, что никаких действий не предпринимается. Вы настроили маршрут к 'userLogin'? – zeantsoi

ответ

14

Похоже Laravel не регистрирует действия, который вы добавили, вероятно, потому, что вы пропустили маршрут. Попробуйте добавить что-то вроде этого к app/routes.php:

Route::post('user/login', '[email protected]'); 
+0

Предполагая разумные значения по умолчанию для страницы входа, не следует ли это «Маршрут :: пост»? – Felix

+0

Очень правильно, обновлено, чтобы отразить. – zeantsoi

+0

Argh, по какой-то причине я думал, что форма :: open будет выполнять маршрутизацию для меня. Добавление «Route :: post» («пользователь/логин», «UserController @ userLogin»); to routes.php сделал это, спасибо! – user2444492

1

После добавления маршрута к routes.php, вы также изменить форму :: Open()? Если нет, вы можете просто разместить свою запись в форме/login или/user/login.

Кроме того, из-за того, что я немного сторонник такого рода вещей, обычно принято иметь контроллеры и модели как единичные, поэтому UserController будет UserController, и поскольку функция входа в систему находится в пределах User (s) Контроллер, ему не нужен префикс пользователя. Может помочь ваш код более читаемым :)

0

Сейчас в Laravel 4 вы можете использовать это:

Route::post('/signup', array('before' => 'csrf', 'uses' => '[email protected]')); 
+0

Это не связано с вопросом. Ничто строго не связано с использованием фильтров или защиты csrf. – Unnawut

+0

Просто советы по добавлению 'uses', а не 'action' –

Смежные вопросы