2014-09-12 3 views
0

На моем route.php у меня есть командаФорма :: открытым получить неправильный маршрут, если страница вызывается Redirect :: назад

Route::resource('users', 'UserController'); 

Artisan маршрут дает мне

+--------+-----------------------------+---------------+------------------------+----------------+---------------+ 
| Domain | URI       | Name   | Action     | Before Filters | After Filters | 
+--------+-----------------------------+---------------+------------------------+----------------+---------------+ 
|  | GET|HEAD/    |    | Closure    |    |    | 
|  | GET|HEAD users    | users.index | [email protected] |    |    | 
|  | GET|HEAD users/create  | users.create | [email protected] |    |    | 
|  | POST users     | users.store | [email protected] |    |    | 
|  | GET|HEAD users/{users}  | users.show | [email protected] |    |    | 
|  | GET|HEAD users/{users}/edit | users.edit | [email protected] |    |    | 
|  | PUT users/{users}   | users.update | [email protected] |    |    | 
|  | PATCH users/{users}   |    | [email protected] |    |    | 
|  | DELETE users/{users}  | users.destroy | [email protected] |    |    | 
+--------+-----------------------------+---------------+------------------------+----------------+---------------+ 

Тогда у меня есть страница для редактирования пользователей с 2-х форм, первым для редактирования, второй для удаления:

{{ Form::open(array('route' => array('users.update', $user->id), 'method' => 'put')) }} 
... 
{{ Form::open(array('route' => array('users.destroy', $user->id), 'method' => 'delete')) }} 

Наконец в UserController я использую Проверка, что перенаправление на предыдущую страницу в случае безуспешной проверки:

if (!$this->user->isValid($id)) 
{ 
    return Redirect::back()->withInput()->withErrors($this->user->errors); 
} 

Когда я приземлился на странице редактирования со страницы списка пользователей, то HTML для обоего форм выглядит хорошо (обратите внимание на скрытое _method поля со значением DELETE):

<form method="POST" action="http://www.virtualbox.me/users/8" accept-charset="UTF-8"><input name="_method" type="hidden" value="PUT"> 
... 
<form method="POST" action="http://www.virtualbox.me/users/8" accept-charset="UTF-8"><input name="_method" type="hidden" value="DELETE"> 

Но если я ввожу значение на поле, которое вызывает проверку на неудачу, то на странице Reloaded также второй метод форма получает положенный вместо DELETE:

<form method="POST" action="http://www.virtualbox.me/users/8" accept-charset="UTF-8"><input name="_method" type="hidden" value="PUT"> 
... 
<form method="POST" action="http://www.virtualbox.me/users/8" accept-charset="UTF-8"><input name="_method" type="hidden" value="PUT"> 

Я что-то не так?

ответ

1

Нечто подобное могло бы работать .... изменить эту строку:

return Redirect::back()->withInput(Input::except('_method'))->withErrors($this->user->errors); 
0

На самом деле Laravel автоматически меняет ваш метод за сценой, о котором упоминается как примечание в Docs. Так как браузеры не понимают запросы PUT, PATCH, DELETE.

Поэтому вам нужно добавить поле _method явно в форму DELETE.

<field type="hidden" name="_method" value="DELETE">