Saltar al contenido

¿Cómo compartir una variable en todas las vistas?

Solución:

Normalmente uso View Composers para que sea más claro y legible.

Por ejemplo, si quiero compartir una variable con la barra de navegación principal para todas mis vistas, sigo las siguientes reglas:

1. Cree un nuevo proveedor de servicios

Puedes crear un proveedor de servicios con artisan cli:

php artisan make:provider ViewComposerServiceProvider

En el ViewComposerServiceProvider crear archivo composeNavigation método en el que tiene la plantilla de la hoja main.nav-menu que representa el menú de navegación con variables compartidas.

los ViewComposerServiceProvider parece:

<?php

namespace AppProviders;

use IlluminateSupportServiceProvider;

class ViewComposerServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        $this->composeNavigation();
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    private function composeNavigation()
    {
        view()->composer('main.nav-menu', 'AppHttpViewComposersNavComposer');
    }
}

2. Crear compositor

Como vio en el archivo de arriba, tenemos Aplicación Http ViewComposers NavComposer.php así que creemos ese archivo. Crea la carpeta VerCompositores en el Aplicación Http y luego adentro crea NavComposer.php expediente.

los NavComposer.php expediente:

<?php

namespace AppHttpViewComposers;

use AppRepositoriesNavMenuRepository;
use IlluminateViewView;

class NavComposer
{
    protected $menu;

    public function __construct(NavMenuRepository $menu)
    {
        $this->menu = $menu;
    }

    public function compose(View $view)
    {
        $thing= $this->menu->thing();
        $somethingElse = $this->menu->somethingElseForMyDatabase();

        $view->with(compact('thing', 'somethingElse'));
    }
}

3. Crear repositorio

Como viste arriba en el NavComposer.php archivo tenemos repositorio. Por lo general, creo un repositorio en el Aplicación directorio, así que crea Repositorios directorio en el Aplicación y luego, crea adentro NavMenuRepository.php expediente.

Este archivo es el corazón de ese patrón de diseño. En ese archivo tenemos que tomar el valor de nuestras variables que queremos compartir con todas nuestras vistas.

Eche un vistazo al archivo a continuación:

<?php

namespace AppRepositories;

use AppThing;
use DB;

class NavMenuRepository
{

    public function thing()
    {
        $getVarForShareWithAllViews = Thing::where('name','something')->firstOrFail();
        return $getVarForShareWithAllViews;
    }

    public function somethingElseForMyDatabase()
    {
        $getSomethingToMyViews = DB::table('table')->select('name', 'something')->get();

        return $getSomethingToMyViews;
    }

}

Para personas con proyecto pequeño:

En primer lugar, ¡la respuesta aceptada es increíble!

Para usuarios de Laravel 5.2:

Simplemente use la nueva directiva blade @inject dentro de sus puntos de vista como este

@inject('shared','AppUtilitiesSharedWithView')

entonces puedes usarlo:
{{ $shared->functionName() }}

Y SharedWithView es una clase simple como esta:

namespace AppUtilities;

use AppRepositoriesSomeRepositoryLikeArticlesRepository;

class SharedWithView {

    public function functionName() {
        $properNameHere = new SomeRepositoryLikeArticlesRepository();

        return $properNameHere->forEaxmpleGetMostViewedArticles( 10 );
    }

}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *