【问题标题】:Passing an id from a select list in a form, getting "non-object" error, Laravel-4从表单中的选择列表中传递一个 id,得到“非对象”错误,Laravel-4
【发布时间】:2014-08-28 17:56:43
【问题描述】:

在仪表板页面上,我以列出组件名称的形式创建了一个选择列表;从选择列表传递的值显然是组件 ID。按下提交后,用户将被路由到显示有关该组件的数据的页面。应该很简单……

控制器:

public function showDashboard()
{
    $components = Component::lists('name','id'); ...
    return View::make('dashboard', array('components'=>$components, ...))
}

dashboard.blade.php:

{{ Form::open(array('route' => array('components.show', $components->id), 'method'=>'get')) }}
{{ Form::Label('id','Component:') }}
{{ Form::select('id', $components) }}
{{ Form::submit('Show Component', array('class'=>'button')) }}
{{ Form::close() }}

我尝试了各种方法,但每次都得到不同的错误。上面的代码甚至不允许我显示仪表板页面——我收到“尝试获取非对象的属性”错误。显然,它不喜欢 $components,因为它是作为列表数组而不是对象传递的。正如我所说,我确信这很简单,我只是想不出正确的语法,而 Laravel 文档并没有给我答案。谢谢!

【问题讨论】:

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


    【解决方案1】:

    问题不在于下拉列表或列表方法,而在于您的表单打开。在这里,您将 $components->id 作为路由的参数,但 $components 是一个数组,您无法访问其上的 id 属性。

    【讨论】:

    • 谢谢,我明白了——我想不通的是如何构造表单打开以将 id 值传递给目标路由,然后让目标页面使用该 id 显示该 ID 的数据。所以,这是我目前更正的表单打开:{{ Form::open(array( 'route' => 'components.show', 'method'=>'get' )) }}
    • 谢谢,我明白了——我想不通的是如何构造表单打开以将 id 值传递给目标路由,然后让目标页面使用该 id 显示该 ID 的数据。所以,这是我当前更正的表单打开: {{ Form::open(array('route' => 'components.show','method'=>'get')) }} - 这将显示下拉选择列表正确:
    【解决方案2】:

    终于想通了。我在这个问题之后在这里发布了一个类似的问题,而不是重复答案,它在这里:

    How to pass id value from select list to controller when controller expects an object? laravel-4

    非常简短的版本:将 Route::get 更改为 Route::post。上面链接中的代码详细信息。问题解决了!

    【讨论】:

      猜你喜欢
      • 2014-08-29
      • 2014-05-09
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      相关资源
      最近更新 更多