【问题标题】:perplexing check box behavior令人困惑的复选框行为
【发布时间】:2015-01-29 00:58:53
【问题描述】:

我有一个带有一些复选框的编辑表单,当建立关联的多对多关系时,我试图检查这些复选框。

经销商属于许多啤酒 啤酒属于许多经销商

在我的控制器中,我有:

        $breweries = Brewery::lists('name', 'id');
        $all_dist = Distributor::all();
        $beer = Beer::find($id);
        $distributions = [];
        foreach ($beer->distributors as $distributor)
            {
                $distributions[$distributor->id] = BeerDistribution::where('beer_id', '=', $beer->id)
                ->where('distributor_id', '=', $distributor->id)->first()->price;
            }

        return View::make('beers.edit', ['beer' => $beer, 'distributors' => $all_dist, 'distributions' => $distributions, 'breweries' => $breweries, 'styles' => $styles]);

我在我的编辑表单中有:

        {{ Form::model($beer, ['route' => ['beers.update', $beer->id], 'method' => 'PATCH']) }}
            @foreach ($distributors as $distributor)
                <?php $carried = in_array($distributor->id, array_keys($distributions)) ? true : false ?>
                {{ Form::checkbox('distributors[]', $distributor->id, $carried); }}
                {{ Form::label($distributor->name) }}
                {{ Form::label('price' . $distributor->id, 'Retail:') }}
                <?php $price = $carried ? $distributions[$distributor->id] : null ?>
                {{ Form::text('price' . $distributor->id, $price ) }}
            @endforeach
            {{ Form::submit('Save') }}
        {{ Form::close() }}

基本上我传递了每个distributor_id => 价格的关联数组。这个数组还告诉我啤酒已经属于哪些分销商,以便我可以在我的编辑表单中标记那些已勾选的。

这就是事情变得不稳定的地方。当我加载此表单时,无论如何都会检查所有复选框。如果我将控制器循环更改为:

foreach ($beer-&gt;distributors()-&gt;lists('distributor_id') as $distributor_id)

然后我可以创建我的数组。

为什么在控制器中调用$beer-&gt;distributors 会导致所有复选框都被选中?

【问题讨论】:

  • 对于原始的 foreach,如果您在 foreach 之后 var_dump 您的 $distributions 数组,它看起来像您期望的那样吗?

标签: php laravel methods


【解决方案1】:

问题在于最后一个参数:$carried

{{ Form::checkbox('distributors[]', $distributor->id, [ "checked" => $carried ]); }}

将最后一个参数作为数组传递,并准确告诉它要修改哪个属性和属性值。

【讨论】:

  • OPs 参数放置正确。 Form::checkbox() 方法的第三个参数是一个布尔值,用于确定是否应选中复选框。 options数组是第四个参数。
  • 是的,为了进一步支持这一点,我可以删除 $carried 并且所有复选框仍会显示为选中状态。即使我没有传入我在控制器中实例化的变量,复选框仍然会被选中。
  • @hodale 尝试仅传递 false 而不是 $carried 变量
  • 看看我是否可以覆盖所应用的真实性可能是值得的,但这无助于解释开始的问题。
猜你喜欢
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-22
  • 1970-01-01
相关资源
最近更新 更多