notes changes actual php variables laravel laravel-4 global

php - actual - laravel 5.7 changes



Variable global en laravel 4 (6)

Debes crear un objeto para hacer eso.

Cree un objeto de provider con esas propiedades, email , name , etc. e instálelo y establezca los valores de las propiedades, como:

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

Y luego guardas el objeto en tu sesión:

$_SESSION[''provider''] = $provider;

No estoy familiarizado con Laravel y no sé si es una buena práctica trabajar directamente con el objeto Auth pero una solución más simple sería:

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

También tenga en cuenta el trabajo con información confidencial en su sesión :)

Me preguntaba cómo hacer una variable global para ahorrarme algunas líneas de copia y pegar estas líneas. Arreglarlo probablemente y ponerlos en una variable en su lugar? Quiero usar esta variable en otras rutas.

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


La mejor manera que he visto es usando un archivo de configuración.

En su aplicación -> carpeta de configuración, crea un nuevo archivo llamado (por ejemplo settings.php )

app config settings.php

Luego, en su archivo de configuración que acaba de crear ( settings.php ) podría agregar:

<?php $setting_data[''foo''] = ''bar''; $setting_data[''bar''] = ''foo''; return $setting_data;

Luego puede recuperar el archivo de configuración de su código usando:

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


Los globales son malos. No importa qué, no use variables globales, no piense en usar variables globales, piense siempre en cómo no puede usarlas en su código y aún tiene todo lo que necesita tener. Aquí hay algunas razones , y hay muchas más.

En su lugar, usa el poder de Laravel para ayudarte a:

Exija el inicio de sesión en sus rutas creando grupos de rutas autenticadas:

Route::group(array(''before'' => ''auth''), function() { Route::get(''/users/posts'', array(''as''=>''users.posts.index'', ''uses''=>''PostsController@usersPostsIndex'')); });

Ahora sabes que cada llamada a tus publicaciones será autenticada, puedes simplemente

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

En su opinión, sólo tendrá que

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

Si no desea escribir código para enviar una instancia de Usuario a todas sus vistas, use la magia de los Compositores de Laravel, agregue esto a su filters.php o cree un archivo composers.php:

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

Y así es como ahora se pueden utilizar tus vistas:

class PostsController extends Controller { public function usersPostsIndex() { return View::(''users.posts.index''); } public function usersPostsEdit() { return View::(''users.edit.index''); } }

Debido a que Laravel inyectará automáticamente Auth::user() en esas vistas como $user .


Me gusta el método View::share .

Agregue lo siguiente en app / controllers / BaseController.php

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

y ahora $user estará disponible para todas sus vistas.

Referencias: Laravel docs , blog post


Puede crear un singleton global dentro de la App::before evento

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); });

En cualquier vista, úsala como

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

En cualquier controlador, puedes usar

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

Echa un vistazo a los eventos de aplicación .


También te di la misma respuesta en otra pregunta que hiciste, no respondiste. Link

No hay razón para tener una variable separada para cada propiedad de su modelo de $provider . Simplemente guarda el modelo entero en una variable como esta.

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

Esto generalmente se haría en una ruta como esta.

Route::get(''/provider/page/example'', function() { $provider = Auth::user(); return View::make(''name.of.view'', [''provider'' => $provider]); });

Después de hacer eso, puede acceder a las diferentes propiedades del $provider en sus vistas como esta.

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

Otra opción es usar un controlador y configurar esta variable solo una vez en el controlador, haciéndolo accesible desde todas las vistas usando View::share() .

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''); } }

Después de haber hecho solo esto, puede usar la variable $provider en sus vistas como se muestra arriba usando cosas como $provider->email . También puede usarlo en otro lugar en el controlador usando $this->provider .