2017-05-10 9 views
0

Nachdem ich von Laravel 4 bis 5.0+ zu Laravel Upgrade 5.1 ich diesen Fehler hätte:Nach dem Upgrade auf Laravel 5.1: vom Typ Array sein muss, da das Objekt

Argument 2 passed to Collective\Html\HtmlBuilder::{closure}() must be of the type array, object given ... macros.php', '92', array('items' => object(Collection))) 

So checkte ich die 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; 
}); 

und mein Helfer Datei: auch

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

aber ich bekomme es nicht, überprüfte ich die composer.json und die Anbieter die Aliase. Alles sieht gut für mich aus. Warum habe ich diesen Fehler?

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

Was ist '$ view-> selectedOptionSalutation' zugeordnet? – patricus

Antwort

0

Der Fehler zeigt, dass die items, die Sie übergeben, eine Collection Instanz ist. Es muss ein Array sein.

Also, ich vermute, dass, wo immer Sie anrufen DropdownHelper::getOptions(), der zweite Parameter, der übergeben wird, ist ein Collection. Rufen Sie ->all() auf dem Collection auf, um das zugrundeliegende Array abzurufen.

0

Ich denke

$selected = array() 

mit

ersetzt
$selected = [] 

sollte funktionieren. in Laravel 4 mussten Sie die array() -Funktion verwenden, aber in der neueren Version können Sie [] verwenden.

+0

das hat nicht funktioniert, aber danke. – blubbering

Verwandte Themen