2015-04-09 11 views
12

Unsere alte Website CSS wurde eingerichtet, so dass das body Tag hatte eine ID des Controllernamens und eine Klasse des Aktionsnamens, mit Zend Framework 1. Jetzt wechseln wir zu Laravel 5 Ich habe einen Weg gefunden, den Aktionsnamen über die Klasse Route zu erhalten, kann aber keine Methode für den Controllernamen finden. Ich sehe in den Laravel-Unterlagen nichts. Irgendwelche Ideen?Get Laravel 5 Controller Name in Sicht

So machen Sie mit Aktion. Sie injizieren die Route-Klasse und rufen dann:

$route->getActionName().

Ich bin auf der Suche nach etwas ähnliches für Controller. Ich habe die gesamte Route-Klasse überprüft und nichts gefunden.

Antwort

27

Wenn Ihr Layout eine Blade-Vorlage ist, könnten Sie einen Ansichts-Composer erstellen, der diese Variablen in Ihr Layout einfügt. In app/Anbieter/AppServiceProvider.php etwas wie folgt hinzu:

public function boot() 
{ 
    app('view')->composer('layouts.master', function ($view) { 
     $action = app('request')->route()->getAction(); 

     $controller = class_basename($action['controller']); 

     list($controller, $action) = explode('@', $controller); 

     $view->with(compact('controller', 'action')); 
    }); 
} 

Sie dann zwei Variablen in Ihrem Layout-Vorlage haben: $controller und $action.

+0

Ich mag, dass verwenden. Es ist nicht ganz das, was ich brauche, aber ich sehe was du tust und ich kann es anpassen. Vielen Dank! – sehummel

+0

Es hat super funktioniert. Danke @Martin Bean! – sehummel

+0

@sehummel Großartig! Ich bin froh, dass ich dich in die richtige Richtung lenken konnte. –

3

Ich verwende eine einfache Lösung. Sie testen können, und verwenden Sie es in überall, auch Ihre Ansichten:

{{ dd(request()->route()->getAction()) }} 
+2

Dies ist, was ich gesucht habe !! –

+0

Aber dies gibt eine lange Zeichenfolge '" App \ Http \ Controllers \ LocalLeadsSearch @ Index "' und ich möchte nur 'LocalLeadsSearch' –

+2

@AnujTBE TBE Sie können einfach string trennen mit explode() PHP-Methode;) – ivahidmontazer

1

folgend etwas wie Postcontroller versuchen zu bekommen ...

preg_match('/([a-z]*)@/i', $request->route()->getActionName(), $matches); 
$controllerName = $matches[1]; 

$ treffer [1] enthält die erste Gruppe, während $ treffer [ 0] enthält alles, was zusammenpasst. Also auch das @ was nicht gewünscht ist.

0

Ich werde einfach als Gebrüll

$request->route()->getActionMethod()