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
.