php - create - Controlador compartido lumen
lumen model (1)
Escribí un controlador "Helper" que quiero usar en otros controladores, pero estoy haciendo algo mal. ¿Lumen Service es lo que necesito? Entonces, simplemente no entiendo cómo configurarlo.
Mi clase principal:
namespace App/Http/Controllers;
use App/Http/Controllers/HelperController as Helper;
class InitController extends Controller
{
public function work($hash, $type)
{
return response()->json([
''answer'' => Helper::makeCodeUrl()
]);
}
}
Controlador auxiliar
namespace App/Http/Controllers;
class HelperController extends Controller
{
public function makeCodeUrl($arr, $type){
return str_random(32);
}
}
Recuerde, un controlador es responsable de manejar la lógica de enrutamiento . Con esto en mente, en realidad no existe un "Controlador auxiliar", ya que no se asignan rutas a él y, por lo tanto, no es realmente un "Controlador" en el sentido tradicional.
Lo que está describiendo es lo que se llama una "Clase de servicio". Cualquier aplicación de complejidad razonable usará clases de servicio como un medio para abstraer toda la lógica de negocios de los Controladores en componentes reutilizables.
En su caso, una clase de servicio es exactamente lo que necesita. Para construir el tuyo, debes hacer algunas cosas:
- Registra un proveedor de servicios
- Agregue la clase de proveedor de servicio real y vincule su servicio de ayuda al contenedor de IOC de la aplicación
- Crea tu servicio de ayuda
- Escriba el servicio de ayuda en el Constructor de su controlador
- Ejecutar
composer dump-autoload
Como una prueba rápida de concepto, así es como terminará luciendo:
bootstrap / app.php
/*
|--------------------------------------------------------------------------
| Register Service Providers
|--------------------------------------------------------------------------
|
| Here we will register all of the application''s service providers which
| are used to bind services into the container. Service providers are
| totally optional, so you are not required to uncomment this line.
|
*/
$app->register(App/Providers/HelperServiceProvider::class);
aplicación / Proveedores / HelperServiceProvider.php
namespace App/Providers;
use Illuminate/Support/ServiceProvider;
use App/Services/Helpers/HelperService;
class HelperServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->bind(HelperService::class, function(){
return new HelperService;
});
}
}
aplicación / Servicios / Helpers / HelperService.php
namespace App/Services/Helpers;
class HelperService
{
public function makeCodeUrl(){
return str_random(32);
}
}
InitController.php
namespace App/Http/Controllers;
use App/Services/Helpers/HelperService;
class InitController extends Controller
{
protected $helperService;
public function __construct(HelperService $helperService)
{
$this->helperService = $helperService;
}
public function work($hash, $type)
{
return response()->json([
''answer'' => $this->helperService->makeCodeUrl()
]);
}
}
Si bien puedo apreciar que hay una pequeña curva de aprendizaje con este patrón particular de código, recomiendo leer lo más posible sobre los proveedores de servicios. En el futuro, demostrará ser extremadamente valioso y le permitirá iniciar bibliotecas enteras de terceros en instalaciones de Laravel o Lumen.