升级到Laravel 5.1后:必须是类型数组,给定对象

时间:2017-05-10 19:46:36

标签: php laravel laravel-5

从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()
    ));

2 个答案:

答案 0 :(得分:1)

错误显示您传入的itemsCollection个实例。它需要是一个数组。

所以,我猜测无论你在哪里调用DropdownHelper::getOptions(),传入的第二个参数都是Collection。在->all()上调用Collection以获取基础数组。

答案 1 :(得分:-1)

我想替换

$selected = array()

$selected = []

应该有效。 在laravel 4中你需要使用array()函数,但在较新版本中你可以使用[]。