wake-up-neo.net

Globale Variable in Laravel 4

Ich habe mich gefragt, wie man eine globale Variable ausführt, um ein paar Zeilen Kopie zu sparen und diese Zeilen einzufügen. Richten Sie es wahrscheinlich ein und setzen Sie sie stattdessen in eine Variable? Ich möchte diese Variable in anderen Routen verwenden.

  $providerEmail = Auth::user()->email;
  $providerName = Auth::user()->first_name;
  $providerSurname = Auth::user()->last_name;
  $providerMobile = Auth::user()->mobile;
19
nCore

Sie können innerhalb von App::before ein globales singleton erstellen

App::before(function($request)
{
    // Singleton (global) object
    App::singleton('myApp', function(){
        $app = new stdClass;
        if (Auth::check()) {
            // Put your User object in $app->user
            $app->user = Auth::User();
            $app->isLoggedIn = TRUE;
        }
        else {
            $app->isLoggedIn = FALSE;
        }
        return $app;
    });
    $app = App::make('myApp');
    View::share('myApp', $app);
});

In jeder Ansicht verwenden Sie es gerne

if($myApp->isLoggedIn) {
    $myApp->user->email;
    $myApp->user->first_name;
    // ...
}

In jedem Controller können Sie verwenden

$myApp = App::make('myApp');
if($myApp->isLoggedIn) {
    $myApp->user->email;
    $myApp->user->first_name;
    // ...
}

Check out Anwendungsereignisse .

52
The Alpha

Der beste Weg, den ich gesehen habe, ist die Verwendung einer Konfigurationsdatei.

In Ihrem app -> config-Ordner erstellen Sie eine neue Datei mit dem Namen (zum Beispiel settings.php).

 app
     config
         settings.php

In Ihrer gerade erstellten Konfigurationsdatei (settings.php) können Sie dann Folgendes hinzufügen:

<?php

$setting_data['foo'] = 'bar';
$setting_data['bar'] = 'foo';

return $setting_data;

Sie können die Konfigurationsdatei dann aus Ihrem Code abrufen:

echo Config::get('settings.foo'); // Will echo bar
echo Config::get('settings.bar'); // Will echo foo
12
ajtrichards

Globals sind schlecht. Unabhängig davon, verwenden Sie keine globalen Variablen, denken Sie nicht an die Verwendung globaler Variablen, denken Sie immer darüber nach, wie Sie sie nicht in Ihrem Code verwenden können und trotzdem haben Sie alles, was Sie brauchen. Hier sind einige Gründe , und es gibt noch viel mehr.

Verwenden Sie stattdessen Laravel, um Ihnen zu helfen:

Erzwingen Sie die Anmeldung auf Ihren Routen, indem Sie Gruppen authentifizierter Routen erstellen:

Route::group(array('before' => 'auth'), function()
{
    Route::get('/users/posts', array('as'=>'users.posts.index', 'uses'=>'[email protected]'));
});

Jetzt wissen Sie, dass jeder Anruf zu Ihren Posts authentifiziert wird

class PostsController extends Controller {

    public function usersPostsIndex()
    {
        return View::('users.posts.index')->
                with('user', Auth::user());
    }

}

Aus Ihrer Sicht müssen Sie nur

{{$user->email}}
{{$user->first_name . ' ' . $user->last_name}}
{{$user->email}}
{{$user->mobile}}

Wenn Sie keinen Code schreiben möchten, um eine Benutzerinstanz an alle Ihre Ansichten zu senden, verwenden Sie die Magie der View Composers von Laravel, fügen Sie diese zu Ihrer filters.php hinzu oder erstellen Sie eine composers.php-Datei:

View::composer(array('users.posts.index','users.posts.edit'), function($view)
{
    $view->with('user', Auth::user());
});

Und so können Ihre Ansichten jetzt verwendet werden:

class PostsController extends Controller {

    public function usersPostsIndex()
    {
        return View::('users.posts.index');
    }

    public function usersPostsEdit()
    {
        return View::('users.edit.index');
    }

}

Weil Laravel automatisch Auth::user() in diese Ansichten als $user einfügt.

Ich mag die View::share-Methode.

Fügen Sie Folgendes in app/controller/BaseController.php hinzu.

class BaseController extends Controller {
    public function __construct() {       
        $name = 'jack';    
        View::share('user', $name); // Share $user with all views
    }
}

und jetzt steht $user für alle Ihre Ansichten zur Verfügung.

Referenzen: Laravel docs , Blogbeitrag

5
Justin

Ich habe Ihnen dieselbe Antwort auch in einer anderen Frage gegeben, die Sie gestellt haben. Sie haben nicht geantwortet. Verknüpfung

Es gibt keinen Grund, für jede Eigenschaft Ihres $provider-Modells eine eigene Variable zu haben. Speichern Sie einfach das gesamte Modell in einer solchen Variablen.

if (Auth::check())
{
    $provider = Auth::user();
}

Dies würde im Allgemeinen auf einer solchen Route erfolgen.

Route::get('/provider/page/example', function()
{
    $provider = Auth::user();

    return View::make('name.of.view', ['provider' => $provider]);
});

Danach können Sie auf die verschiedenen Eigenschaften von $provider in Ihren Ansichten wie folgt zugreifen.

<p>Your email address is: {{$provider->email}} and your first name is {{$provider->first_name}}</p>

Eine andere Option besteht darin, eine Steuerung zu verwenden und diese Variable nur einmal in der Steuerung festzulegen, sodass sie von allen Ansichten aus mit View::share() verfügbar ist.

class ProviderController extends BaseController {

    protected $provider;

    public function __construct()
    {
        $this->provider = Auth::user();

        View::share('provider', $this->provider);
    }

    public function getIndex()
    {
        return View::make('some.view.name');
    }
}

Danach können Sie die Variable $provider in Ihren Ansichten wie oben gezeigt verwenden, beispielsweise mit $provider->email. Sie können es auch an anderer Stelle im Controller verwenden, indem Sie $this->provider verwenden.

1
Sajan Parikh

Sie sollten dazu ein Objekt erstellen.

Erstellen Sie ein provider-Objekt mit diesen Eigenschaften, email, name usw., und instanziieren Sie es und legen Sie die Eigenschaftswerte wie folgt fest:

$provider = new Provider();

$provider->email = Auth::user()->email;

Und dann speichern Sie das Objekt in Ihrer Sitzung:

$_SESSION['provider'] = $provider;

Ich bin nicht mit Laravel vertraut und weiß nicht, ob es eine gute Praxis ist, direkt mit dem Auth-Objekt zu arbeiten, aber eine einfachere Lösung wäre:

$_SESSION['provider'] = Auth::user();

Beachten Sie auch die Arbeit mit vertraulichen Informationen in Ihrer Sitzung :)

0
Gerep