Передача значений формы с помощью RESTful-маршрутизации в Laravel 4

Я настроил вложенные маршруты ресурсов RESTful так:

Route::group(array('prefix'=>'opening-hours'), function(){
Route::resource('library', 'LibraryController');
Route::resource('library.interval', 'LibraryIntervalController');
});

У меня есть блэйд-форма, в которой есть выпадающий список с опциями, заполненными из БД, например:

{{ Form::open(array('route' => 'opening-hours.library.show', 'method' => 'GET')) }}
<legend>Select a library to edit</legend>
<div class="form-group">
<label for="">Please select a library to modify its opening hours:</label>
<select class="form-control" name="id" required>
@foreach ($library_options as $id => $name)
<option value="{{ $id }}">{{ $name }}</option>
@endforeach
</select>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
{{ Form::close() }}

Форма отправляется по названному маршруту:

opening-hours.library.show

Сама маршрутизация работает, но у меня есть пара вопросов по логистике (я немного запутался в том, как использовать маршрутизацию):

  • Я могу получить форму для отправки по правильному маршруту, если я сделаю это
    Запрос ‘GET’ (часы работы GET / HEAD / library / {library} =>
    creation-hours.library.show), поскольку соответствующий маршрут POST не
    существовать
  • как передать выбранный пользователем $ id в шоу контроллера ($ id)
    метод?
  • когда я отправляю форму, она отправляется на URI
    »../Opening-hours/library/%7Blibrary%7D?id=3″ . Так что, если пользователь выбирает
    библиотека с id = 3, как мне сделать URI «../opening-hours/library/3»?

Вот мой метод показа контроллера библиотеки:

/**
* Display the specifed library.
*
* @param  int  $id
* @return Response
*/
public function show($id)
{
//
return "This is a library with id: " . $id . "!";
}

Когда я отправляю форму, отображается следующее:

Это библиотека с идентификатором: {библиотека}!

Конечно, я бы хотел, чтобы это отображалось:

Это библиотека с id: 3!

Я, очевидно, не понимаю что-то критическое о том, как REST или Laravel или оба работают здесь. Любые указатели будут очень признательны, я потратил целый день на это!

большое спасибо

0

Решение

Попробуйте использовать

$id = Input::get('id');

Документация

Я также рекомендовал бы использовать предоставленные помощники для форм:

echo Form::select('size', array('L' => 'Large', 'S' => 'Small'));

Документация

0

Другие решения

Выписывание проблемы, казалось, помогло мне найти решение. Казалось глупым использовать форму для отправки запроса ‘GET’, поэтому я подумал (bing!), Почему бы просто не сконструировать URI как атрибуты href якорного тега. Поэтому вместо использования формы я сделал:

@foreach( $library_options as $id => $name )
<a class="btn btn-primary" href="{{ URL::to('opening-hours/library/' . $id) }}">Edit {{ $name }}</a>
@endforeach

Это решило проблему хитрых URI, а также идентификатор был напрямую доступен из метода контроллера RESTful, например:

public function show($id)
{
return "This is a library with id: " . $id . "!";
}
0

По вопросам рекламы [email protected]