从Laravel 4升级到5.0+到Laravel 5.1后,我收到了这个错误:
Argument 2 passed to Collective\Html\HtmlBuilder::{closure}() must be of the type array, object given ... macros.php', '92', array('items' => object(Collection)))
所以我查看了macros.php
/**
* Render Dropdown Options
*/
HTML::macro('dropdownOptions', function(Collection $items, array selected, $withEmpty = true, $render = false)
{
$options = null;
/* jQuery Plugin 'choosen' needs an empty option as
* default selection */
if ($withEmpty)
{
$options = '<option></option>';
}
$items->each(function($item) use(&$options, $selected)
{
$options .= sprintf('<option %s value="%s">%s</option>',
(in_array($item->id, $selected)) ? 'selected="selected"' : '',
$item->id,
$item->name
);
});
if ($render)
{
echo $options;
}
return $options;
});
我的助手文件:
use HTML;
use Illuminate\Database\Eloquent\Model;
class DropdownHelper
{
public static function getOptions($type, $selected = array())
{
return HTML::dropdownOptions(self::get(new $type), $selected);
}
public static function getGroupedOptions($type, $selected = array(), $childPropertyName = 'services')
{
return HTML::groupedDropdownOptions(self::get(new $type), $selected, $childPropertyName);
}
protected static function get(Model $model)
{
return $model::all();
}
}
但是我没有得到它,我检查了composer.json和提供者也是别名。一切看起来都不错。为什么我收到此错误?
DropdownHelper :: getOptions:
$view
->with('optionsSalutation', DropdownHelper::getOptions(
DropdownEntityEnum::Salutations, $view->selectedOptionSalutation))
->nest('profileImageSection', 'customer.partials.profileimage', array('image' => $view->image));
UserProfileController:
$data = array_merge(Auth::user()->profile->toArray(), array(
'view' => 'customer.account.profile.private',
'type' => Auth::user()->getTypeId(),
'selectedOptionSalutation' => [Auth::user()->profile->getSalutationId()],
'image' => Auth::user()->profile->image,
'has_newsletter' => Auth::user()->getHasNewsletter()
));
答案 0 :(得分:1)
错误显示您传入的items
是Collection
个实例。它需要是一个数组。
所以,我猜测无论你在哪里调用DropdownHelper::getOptions()
,传入的第二个参数都是Collection
。在->all()
上调用Collection
以获取基础数组。
答案 1 :(得分:-1)
我想替换
$selected = array()
带
$selected = []
应该有效。 在laravel 4中你需要使用array()函数,但在较新版本中你可以使用[]。