在Laravel 4中使用RESTful路由传递表单值

时间:2014-09-23 04:27:51

标签: php forms rest laravel-4 laravel-routing

我已经设置了嵌套的RESTful资源路由,如下所示:

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

我有一个刀片表单,其中有一个选择下拉列表,其中包含从db填充的选项,如下所示:

{{ 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

路由本身有效,但我对物流有几个问题(我对如何使用路由有点困惑):

  • 如果我成功的话,我可以让表格提交到正确的路线 &#39; GET&#39;请求(GET / HEAD开放时间/图书馆/ {library} =&gt; opening-hours.library.show),因为相应的POST路由没有 存在
  • 如何将用户选择的$ id传递给控制器​​show($ id) 方法
  • 当我提交表单时,它会转到URI &#34; ../开口小时/库/%7Blibrary%7D ID = 3&#34 ;.因此,如果用户选择 id = 3的库,如何制作URI&#34; ../ opening-hours / library / 3&#34;?

这是我的图书馆控制器显示方法:

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

提交表单时,会显示以下内容:

这是一个id为{library}!

的库

当然,我希望它显示:

这是一个id为3的图书馆!

我显然不理解关于REST或Laravel如何在这里工作的批评。任何指针都会非常感激,我花了一天时间来讨论这个问题!

非常感谢

2 个答案:

答案 0 :(得分:0)

尝试使用

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

Documentation

我还建议使用提供的表单助手:

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

Documentation

答案 1 :(得分:0)

写出问题似乎有助于我提出解决方案。使用表格发送“GET&#39;”似乎很愚蠢。请求,所以我想(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控制器方法直接获得id,如下所示:

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