2017-05-08 6 views
1

Ich würde gerne wissen, ob es andere Möglichkeiten gibt, als meine Anfrage in meinem Controller zu wiederholen. Ich habe eine Funktion show($slug) mit einer Abfrage innerhalb, die die Variable $teacher übernimmt.Wie greife ich von einer anderen Methode auf eine Variable zu? Oder wie geht es besser?

protected function show($slug) 
{ 
    $teacher = Teacher::where('slug', $slug)->firstOrFail(); 

    return view('posts.postTeacher', [ 
     'teacher' => $teacher, 
     'imageProfile' => $this->getImageProfile($slug) 
    ]); 
} 

habe ich eine andere Funktion mein Bild zu verwalten. Nur, ich weiß nicht, wie man auf den Variabel-Lehrer der anderen Methode zugreift. Dann muss ich mit dem $ slug auch einen neuen erstellen.

public function getImageProfile($slug) 
{ 
    $teacher = Teacher::where('slug', $slug)->firstOrFail(); 

    $basePath = 'uploads/teachers/'; 
    $fullname = pathinfo($teacher->picture, PATHINFO_FILENAME); 
    $imageProfile = $basePath . $fullname . '_profile.jpg'; 

    return $imageProfile; 
} 

Gibt es einen besseren Weg, dies zu tun?

+0

Können Sie '$ lehrer' nicht an' getImageProfile() 'als Argument übergeben, zusätzlich zu' $ slug'? Oder statt "$ slug" - Sie verwenden es nicht in dem Code, den Sie zeigen. – alexis

Antwort

3

Warum nicht nur bewegen getImageProfile innerhalb Teacher -klasse?

class Teacher extends Model { 

    // .... 

    public function getImageProfile() 
    { 
     $basePath = 'uploads/teachers/'; 
     $fullname = pathinfo($this->picture, PATHINFO_FILENAME); 
     return $basePath . $fullname . '_profile.jpg'; 
    } 

} 

und

protected function show($slug) { 
    $teacher = Teacher::where('slug', $slug)->firstOrFail(); 

    return view('posts.postTeacher', [ 
     'teacher' => $teacher, 
     'imageProfile' => $teacher->getImageProfile() 
    ]); 
} 

Gruppierung logische Dinge zusammen, machen die Nutzung einfacher

+0

Vielen Dank! Ihre Lösung funktioniert und ist wirklich ideal. Ich dachte nicht daran, es so zu machen, jetzt würde ich es nicht mehr vergessen. Vielen Dank ! – Jeremy

1

Ihre zweite Methode, um die $fullname als Eingabeargument nehmen könnte:

protected function show($slug) 
{ 
    $teacher = Teacher::where('slug', $slug)->firstOrFail(); 
    $fullname = pathinfo($teacher->picture, PATHINFO_FILENAME); 

    return view('posts.postTeacher', [ 
     'teacher' => $teacher, 
     'imageProfile' => $this->getImageProfile($slug, $fullname) 
    ]); 
} 

public function getImageProfile($slug, $profilePrefix) 
{ 
    $basePath = 'uploads/teachers/'; 
    $imageProfile = $basePath . $profilePrefix . '_profile.jpg'; 

    return $imageProfile; 
} 
+0

@ Philipps Antwort würde auch funktionieren, und ist definitiv sauberer. – khan

1

Sie sollten sein in der Lage, dies mit Route-Model Binding zu tun (wie beschrieben here). Sie können eine Methode zu Ihrem Lehrer Modell hinzufügen, die angibt, dass Sie einen Butzen verwenden (anstelle einer ID, die Standardeinstellung):

public function getRouteKeyName() 
{ 
    return 'slug'; 
} 

Mit diesem können Sie Ihre Setup-Routen für die Schnecke zu suchen und Ziehen Sie die entsprechende Instanz des Lehrermodells zur Verwendung in Ihren Controller-Methoden hoch.

Verwandte Themen