Estoy leyendo la documentación de Laravel para obtener una comprensión más profunda y esta sería la segunda vez que me encuentro con un poco de confusión.

No hace mucho, estaba trabajando en un video de Laracasts en el que implementamos un compositor de vistas en nuestro método de registro AppServicesProvider.

Que se ve así:

public function register()
{
    view()->composer('layouts.sidebar', function ($view) {
        $archives = \App\Post::archives();
        $tags = \App\Tag::has('posts')->pluck('name');
        $view->with(compact('archives', 'tags'));
    });
}

Lo que hace es que los archivos y las etiquetas estén disponibles para nuestra vista de barra lateral, que está disponible en casi todas las páginas. (Los videos de Laracast involucraron la construcción de un blog desde cero)

Hasta aquí todo bien.

Hoy, mientras leo la documentación de un compositor de vistas, encuentro este ejemplo:

/**
 * Register bindings in the container.
 *
 * @return void
 */
public function boot()
{
    // Using class based composers...
    View::composer(
        'profile', 'App\Http\ViewComposers\ProfileComposer'
    );

    // Using Closure based composers...
    View::composer('dashboard', function ($view) {
        //
    });
}

Ahora, CREO que entiendo la creación de sus propios compositores basados en ComposerServiceProvider y clases frente a los basados en cierre. La fuente de mi confusión es que esto se está haciendo en el método boot() frente al método register().

Es totalmente posible que haya escrito esto en el lugar equivocado. Si lo pienso, casi no tiene sentido que esté en el método register(), ya que register solo debería usarse para registrar servicios. El arranque se llama después de llamar a TODOS los métodos de registro. ¡Si alguien pudiera aclararme esto, se lo agradecería!

¿El compositor de vistas pertenece al método register() o al método boot()? Y si pertenece al método register(), ¿es solo una coincidencia que todavía funciona para mí?

3
LaziTurtle 18 feb. 2018 a las 03:55

2 respuestas

La mejor respuesta

Deben colocarse en el método de arranque. El método de registro no garantiza que las dependencias se resolverán cuando las necesite. Con el método de arranque tienes esa garantía. Y como mencionaste, idealmente deberías crear un proveedor de servicios separado para los compositores de vistas.

2
user320487user320487 18 feb. 2018 a las 01:52