2016-05-23 8 views
0

Wie der Titel sagt, bekomme ich einen seltsamen Fehler in Laravel 5. Ich bin neu in Laravel, und diese Woche tauchte ich in Jobs/Warteschlangen. Ich habe in der Vergangenheit einen Fehler "Undefinierte Variable: $ errors" erhalten, den ich verstehen und beheben konnte. Aber jetzt kann ich nicht mehr an diesem vorbeikommen. Soweit ich weiß, sieht alles gut aus. Die folgende Aufstellung wird (hoffentlich) gibt Ihnen eine Vorstellung von dem, was ich tue/wo der Fehler passiert:Laravel 5: Ungerade "Undefinierte Variable" Fehler beim Zurückgeben eines definierten Arrays zu Ansicht

class PostFormFields extends Job implements SelfHandling 
{ 
use InteractsWithQueue, SerializesModels; 

/** 
* The id (if any) of the Post row 
*/ 

protected $id; 


/** 
* List of fields and default value for each field 
*/ 

protected $fieldList = [ 
    'title' => '', 
    'subtitle' => '', 
    'page_image' => '', 
    'content' => '', 
    'meta_description' => '', 
    'is_draft' => '8', 
    'publish_date' => '', 
    'publish_time' => '', 
    'layout' => 'blog.layouts.post', 
    'tags' => [], 
]; 


/** 
* Create a new job instance. 
* 
* @return void 
*/ 

public function __construct($id = null) 
{ 
    $this->id = $id; 
} 

/** 
* Execute the job. 
* 
* @return void 
*/ 
public function handle() 
{ 
    $fields = $this->fieldList; 

    if($this->id) 
    { 
     $fields = $this->fieldsFromModel($this->id, $fields); 

    } else { 
     $when = Carbon::now()->addHour(); 
     $fields['publish_date'] = $when->format('M-j-Y'); 
     $fields['publish_time'] = $when->format('g:i A'); 
    } 

    /** 
    * Populate with old values, if they exist 
    * @var [type] 
    */ 
    foreach ($fields as $fieldName => $fieldValue) 
    { 
     $fields[$fieldName] = old($fieldName, $fieldValue); 
    } 

    $fields = array_merge($fields, ['allTags' => Tag::lists('tag')->all()]); 

    return $fields; 
} 

Oben ist der Code innerhalb der Handler-Funktion meiner Jobklasse, die Datei, um sie in sitzt heißt PostFormFields.php. Es ist im Wesentlichen Aufgabe, ein Array zurückzugeben, das mit allen Werten gefüllt ist, die zu einem Beitrag gehören, basierend auf dem Post-Modell und dem, was sich in der Datenbank befindet, die zu diesem spezifischen Post gehört ('Titel', 'Inhalt' usw.) Benutzer eingegeben sie in der Vergangenheit

public function create() 
{ 

    $data = $this->dispatch(new PostFormFields()); 
    $data['title'] = 'testing'; 
    var_dump($data); 

    return view('admin.post.create', $data); 
} 

Oben ist der Code in meiner Postcontroller-Klasse, in der create() Methode. Wie Sie sehen können, verwende ich einen Ressourcen-Controller für meinen Post-Controller. Er löst den Job PostFormFields aus und speichert alle zurückgegebenen Daten in einem Array $ data. Da die Methode create() jedoch zum Erstellen eines neuen Posts verwendet wird, sollten nur die Schlüssel zurückgegeben werden, deren Werte auf ihren Standardwert '' gesetzt sind.

Das funktioniert. Wie Sie sehen können, führe ich eine 'var_dump()' für die Variable $ data aus, um zu sehen, was, wenn überhaupt, zurückgegeben wird. Ich übergebe dann das $ data-Array an die create View. Hier kommt der Fehler auf.

Laravel "Undefined Varieble" Error

Oben ist ein Bild von der Störung, die ich erhalte, wenn ich versuche Route der/erstellen zuzugreifen. Es ist klar, dass in den $ data die Variable $ title sowie alle anderen Schlüssel im Array definiert sind. Warum erhalte ich ein Array "Undefinierte Variable", wenn ich es eindeutig durch die Zeit definiert habe, die es an die Erstellungsansicht gesendet wird?

Die Codezeile ist, sagt der Fehler in der folgenden:

<input type="text" class="radius" name="title" id="title" value="{{ $title }}"> 
+0

Sie sind ein Array übergeben, sondern versucht, eine Variable zu nennen. Wenn Sie {{$ title}} in {{$ data ['title']}}} ändern, funktioniert das? –

+0

Es meldet einen Fehler in '_form.blade.php'. Wie und wo fügen Sie diesen Vorlageteil ein? – mirzap

+0

@CanCelik Doing, das gibt mir einen weiteren Fehler: 'Verwendung von undefinierten konstanten Daten - angenommen 'Daten''. Übergeben Arrays nicht an Ansichten und greifen auf die Schlüssel/Wert-Paare in ihnen ziemlich allgemein in Laravel? – jactorrez

Antwort

0

Sie haben das Array passieren über kompakte Funktion von Laravel anzuzeigen. Damit können Sie es in der Ansicht verwenden, wie Sie möchten. Bitte überprüfen Sie über kompakte hier - https://laracasts.com/discuss/channels/general-discussion/phps-compact-pros-and-cons?page=1

public function create() 
{ 

    $data = $this->dispatch(new PostFormFields()); 
    $data['title'] = 'testing'; 
    var_dump($data); 

    return view('admin.post.create', compact('data')); 
} 
+0

Was Sie mit Compact tun, ist, dass Sie $ Daten Variable an die Ansicht übergeben.Dann greifen Sie auf den Titel zu, wie @CanCelik vorgeschlagen hat - '$ data ['title'] '. Wenn Sie jedoch ein Array übergeben, stehen Ihnen alle Array-Schlüssel als Variablen zur Verfügung. – mirzap

Verwandte Themen