php - una - Laravel 5 Estructura del proyecto(Sistema de complementos)
sistema web php con laravel y mysql 3 36 diseño de la base datos (1)
Intento desarrollar mi primera aplicación Laravel (5) que se puede ampliar mediante complementos. He estado leyendo mucho sobre arquitecturas de complementos, pero lo que estoy luchando es la mejor o la mejor forma de organizar un proyecto de este tipo en Laravel. Estaría muy agradecido por cualquier ayuda y consejo aquí, ya que no quiero iniciar el camino incorrecto.
Así es como estoy pensando en estructurar e implementar esto:
/ Plugins
- PluginManager.php
/ Contracts
- PluginInterface.php
/ Plugins
/ ExamplePlugin1
- ExamplePlugin1.php
/ ExamplePlugin2
- ExamplePlugin2.php
Pregunta 1: ¿Dónde sería el mejor lugar para ubicar el directorio raíz / complementos? Directamente en la carpeta de la aplicación / raíz o en algún lugar como la aplicación / Http?
Al inicio de la aplicación, quiero que la clase PluginManager escanee el directorio de complementos / complementos / sub, ya que allí residirán todos los complementos instalados. En ese punto, el PluginManager creará una instancia de reflexión de esas clases de complemento y las almacenará en una matriz para que pueda recorrerlas más adelante y llamar a los métodos si existen.
Pregunta 2: como quiero que el PluginMananger esté disponible para todas las solicitudes, ¿debería utilizar un proveedor de servicios y una fachada para esto?
Pregunta 3: ¿Es este método eficiente o podría alguien ofrecer una solución alternativa?
Todos esos complementos implementarán la interfaz PluginInterface para que la clase PluginManager pueda invocar, por ejemplo, una función init () en todos los complementos.
Gracias por tu tiempo
Pregunta 1
La forma más sencilla de hacerlo es crear un directorio "app / Plugins" ("app / Http / Plugins" solo si sus complementos son específicos de la aplicación core de Laravel o del enrutamiento @RTM : "Piense en la consola y en los directorios de Http como proveedores una API en el "núcleo" de su aplicación " ).
Pregunta 2
¡SÍ! @ver: problema de rendimiento con proveedores diferidos
Pregunta 3
¿Se puede hacer una especie de plugins.lock en la raíz de la aplicación para evitar escanear "app / plugins" en cada solicitud?