2017-06-03 3 views
2

Ich habe eine Tabelle statuses (Spalten id, statusename) und möchten eine "Select" -Liste basierend auf dieser Tabelle dynamisch anzeigen. Mein Modell:Wie erstellen dynamisch generierten Dropdown in Laravel Blade

namespace App; 

    use Illuminate\Database\Eloquent\Model; 

    class Statuses extends Model 
    { 
     protected $table = "CaseStatus"; 
    } 

Controller:

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Statuses; 
class StatusesList extends Controller 
{ 
    public function getstatuseslist() { 
     $list = Statuses::all(); 
     return view('forms.statuses')->with('data', $list); 
    } 
} 

statuses.blade.php:

<select name="Statuses"> 
@foreach ($data as $page) 
<option value="{{ $page->ID }}">{{ $page->StatuseName }}</option> 
@endforeach 
</select> 

Route:

Route::any('/list/statuses','[email protected]'); 

Wenn ich bin offen url http://myproject/list/statuses - es funktioniert gut, ich sehe die Dropdown-Liste. Aber wenn ich meine statuses.blade.php in einer Form in eine andere Vorlage enthalten:

@include('forms.statuses') 

Ich erhalte den Fehler

"Undefined variable data". 

Wie es richtig schließen? Meine Laravel-Version ist 5.4.

+1

wo du @include ('forms.statuses') gesetzt hast, meine ich in welcher .blade Datei? –

+0

ich bin es in meine views \ forms \ dialog-mainform.blade.php –

+0

in diesem Fall müssen Sie Return-Ansicht aufrufen ('forms.dialog-mainform') -> mit ('Daten', $ Liste); –

Antwort

2

ersten allen Modellen sollen auf Raw und nicht die Tabellen erhalten, wenn Sie Tabelle statuses Ihr Modell haben sollte status sein.

Das Problem, dass Ihre Funktion nicht in einem anderen Blade funktioniert, liegt daran, dass Ihr anderer Blade-Controller nicht mit Ihrem Modell verbunden ist, so dass er nicht weiß, wo er die gewünschten Informationen erhalten soll. Um dieses Problem zu lösen, ist es einfach, fügen Sie einfach Ihre Modellcodes hinzu->

public function getstatuseslist() { 
     $list = Statuses::all(); 
     return view('your_other_view')->with('data', $list); 
    } 

in diesen Seitencontroller.

Vergessen Sie nicht, Ihr Modell auch in Ihrem zweiten Controller aufzurufen.

use App\Statuses; 

danach wird auch in Ihrer zweiten Klinge gut funktionieren.

0

Ich denke, Ihre $data wird nur an Ihre 'forms.statuses' Ansicht übergeben, wenn es von der Controller-Methode, die Sie definiert haben.

Wenn Sie diese Daten für andere "übergeordnete" Ansichten verwenden möchten, die 'forms.statuses' enthalten, müssen Sie sie erneut in der Steuerung übergeben, die diese übergeordnete Ansicht zurückgibt.

Es gibt einen Weg, wie Sie es in vielen Ansichten beibehalten können. Siehe 'View Composer' für Details. Hier ist der Link Komponisten bei Laravel doc anzuzeigen: https://laravel.com/docs/5.4/views#view-composers