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étodoboot()
? Y si pertenece al métodoregister()
, ¿es solo una coincidencia que todavía funciona para mí?
2 respuestas
Citando la respuesta dada por un usuario en este pregunta:
¿Diferencia entre el método de inicio y registro?
De hecho, anoche aprendí la diferencia del libro de Taylor. Aquí hay un extracto al respecto:
"Una vez registrados todos los proveedores, se" arrancan ". Esto activará el método de arranque en cada proveedor. Un error común cuando se utilizan proveedores de servicios es intentar utilizar los servicios proporcionados por otro proveedor en el método de registro. Dado que, dentro de la método de registro, no tenemos garantía de que se hayan cargado todos los demás proveedores, es posible que el servicio que está intentando utilizar no esté disponible todavía. Por lo tanto, el código del proveedor de servicios que utiliza otros servicios siempre debe estar en el método de inicio. El método de registro solo debe ser utilizado para, lo adivinaste, registrar servicios con el contenedor. Dentro del método de arranque, puedes hacer lo que quieras: registrar oyentes de eventos, incluir un archivo de rutas, registrar filtros o cualquier otra cosa que puedas imaginar ".
Entonces, el registro uno es solo para vincular. El de arranque es realmente provocar que suceda algo.
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.
Preguntas relacionadas
Nuevas preguntas
php
PHP es un lenguaje de secuencias de comandos interpretado, dinámico, orientado a objetos y ampliamente utilizado, diseñado principalmente para el desarrollo web del lado del servidor. Se utiliza para preguntas sobre el lenguaje PHP.