tutorial - Laravel 4: ¿cuándo utilizar proveedores de servicios?
laravel tutorial (3)
Intenté googlearlo pero no encontré información detallada.
Los proveedores de servicios son una excelente forma de agrupar registros de IoC en una sola ubicación. Piense en ellos como una forma de arrancar componentes en su aplicación.
No entendiendo de la documentación. ¿Esto solo es necesario cuando creo paquetes? Entonces, cuando soy desarrollador habitual y no hago algunos paquetes para lanzar en público, ¿no me tiene que importar?
Una de las claves para construir una aplicación Laravel bien diseñada es aprender a utilizar proveedores de servicios como una herramienta de organización. Cuando está registrando muchas clases con el contenedor IoC, todas esas vinculaciones pueden comenzar a llenar sus archivos de aplicación / inicio. En lugar de realizar registros de contenedores en esos archivos, cree proveedores de servicios que registren servicios relacionados.
Entonces, esta es una forma de organizar los servicios de su aplicación en un solo lugar para mantenerla más organizada. Un proveedor de servicios debe tener al menos un método: registrarse. El método de registro es donde el proveedor vincula las clases al contenedor. Cuando una solicitud ingresa a su aplicación y el marco se está iniciando, se llama al método de registro en los proveedores que figuran en su archivo de configuración
''providers'' => array(
''Illuminate/Foundation/Providers/ArtisanServiceProvider'',
''Illuminate/Auth/AuthServiceProvider'',
''Illuminate/Cache/CacheServiceProvider'',
// more ...
''Illuminate/Html/HtmlServiceProvider'',
// more ...
)
Esta es la matriz de proveedores en el archivo de configuración app.php
y este es el HtmlServiceProvider
almacenado en ''Illuminate/Html/HtmlServiceProvider.php''
use Illuminate/Support/ServiceProvider;
class HtmlServiceProvider extends ServiceProvider {
//...
public function register()
{
$this->registerHtmlBuilder();
$this->registerFormBuilder();
}
protected function registerHtmlBuilder()
{
$this->app[''html''] = $this->app->share(function($app)
{
return new HtmlBuilder($app[''url'']);
});
}
protected function registerFormBuilder()
{
$this->app[''form''] = $this->app->share(function($app)
{
$form = new FormBuilder($app[''html''], $app[''url''], $app[''session'']->getToken());
return $form->setSessionStore($app[''session'']);
});
}
}
Cuando, Laravel
arranca, llama a este método ( register
) y en este método hay dos líneas, estas líneas llaman a dos métodos, registerHtmlBuilder()
y registerFormBuilder()
, ambos componentes de los métodos al contenedor IoC
usando
$this->app[''html''] = $this->app->share(...);
$this->app[''form''] = $this->app->share(...);
En este caso, ambas son funciones anónimas que devuelve una instancia de la clase html/form
y es por eso que cuando se usa
Html::link(...);
O, usando forma
Form::input(...);
Obtiene la clase vinculada del objeto $app
que está disponible para su aplicación. En este caso ''Html'' => ''Illuminate/Support/Facades/Html'',
se utiliza para alias de la clase principal en la matriz de aliases
en el archivo app.php
.
Entonces, en Laravel
, los proveedores de servicios son una forma de organizar las cosas de una manera más limpia, durante el proceso de inicio de su aplicación, Laravel
ejecuta todos register
métodos de register
de todos los proveedores de servicios para que cada componente esté disponible (vinculado) al contenedor IoC
para que pueda acceder a ellos en su aplicación.
Vale la pena mencionar que, después de llamar a todos register
métodos de register
de los proveedores de servicios, se llama a todos los métodos de boot
de esos proveedores de servicios. En ese caso, si necesita usar algún servicio de la aplicación (IoC / Service Container) dentro de la clase de proveedor de servicios, debe usar ese servicio desde el método de arranque, ya que no se garantiza que haya ningún servicio disponible durante la registración de los proveedores de servicios. (dentro del método de registro) porque los servicios se registran a través del método de register
de cada proveedor de servicios, pero dentro del método de boot
puede usar cualquier servicio, porque para entonces se espera que todos los servicios estén registrados.
Verifique esta respuesta Laravel 4: ¿Cómo se resuelven las fachadas? también, puede ayudarte a entender.
En Laravel, los proveedores de servicios están directamente relacionados con la forma en que funciona el contenedor IoC. Permiten un enfoque más fácil y más modular a las dependencias. De hecho, es un gran patrón para organizar su código de manera bootstrap (incluso fuera de Laravel). Creo que si usted es un desarrollador regular, aún necesita conocer los conceptos básicos de los proveedores de servicios de Laravel, ya que ese patrón es parte integral de la arquitectura de Laravel. Estoy seguro de que puede hacer que su trabajo sea más fácil.
Por ejemplo, al instalar un paquete, debe darle acceso a la aplicación para ese paquete: una de las mejores soluciones es a través de la lista de proveedores de servicios y una fachada. Por otro lado, no puedo imaginarme ser un desarrollador de Laravel sin conocer los conceptos básicos de SP-s.
No hay nada que un proveedor de servicios pueda hacer, simplemente no puede ingresar a app / start / global.php, pero con un proveedor de servicios reúne toda la lógica en un solo lugar y puede desarrollar la aplicación de una manera más modular.
Si está haciendo un paquete, un proveedor de servicios es casi imprescindible.