tutorial que programacion español comentarios php symfony

php - que - ¿Cómo estructurar un proyecto en Symfony2?



symfony 4 tutorial (4)

Me gustaría preguntar, ¿cuál es la mejor manera de estructurar un proyecto con frontend y back-end en Symfony2? En otras versiones de Symfony esto es fácil de lograr, ya que puede crear dos aplicaciones: frontend y backend, luego todas las bibliotecas / modelos se compartirán entre esas aplicaciones.

Ahora en Symfony2, todo es un paquete. Lo que no está realmente claro para mí es cómo podría representar las "dos" aplicaciones, frontend y back-end. ¿Debo crear dos espacios de nombres, frontend y backend? Me gustaría mantener mis entidades en un solo lugar, en lugar de acceder a ellas desde las dos aplicaciones.


Por lo que sé, todavía puedes hacer más o menos lo mismo con Symfony2. Simplemente cambie el nombre de la aplicación / a app_frontend y haga una copia a app_backend, también duplique la web / de la misma manera. Entonces todo lo demás puede vivir en paquetes. Los paquetes son muy potentes, ya que pueden contener rutas, configuraciones o cualquier otra cosa, por lo que puede compartir lo que desea y aislar perfectamente lo que no desea compartir.

Puede haber algunos problemas con el bin / scripts debido a directorios renombrados, pero solo tiene que configurarlos correctamente (o plantearlo como un problema en el sitio Github de Symfony).


He intentado el enfoque sugerido por PAStheLoD (crear app_backend y web_backend, etc.) pero lo encontré demasiado complicado; debe recordar a qué aplicación dirigirse desde la consola, mantener archivos de arranque separados y la estructura del directorio se vuelve desordenada.

El método recomendado por la documentación de Symfony La documentación de Symfony es tener un proyecto separado para cada aplicación. Luego puede crear un área separada para su código fuente, escribir la mayoría (si no todos) de sus paquetes allí y luego simplemente ajustar cómo se incluyen en autoload.php de ambas aplicaciones.

p.ej

admin_app/ app/ bin/ src/ web/ frontend_app/ app/ bin/ src/ web/ common_src/ Acme/ AdminBundle/ DataBundle/ jQueryBundle/

Luego, en * _app / app / autoload.php:

$loader->registerNamespaces(array( ''Acme'' => __DIR__ . ''/../../common_src'' ));


Solo tiene una aplicación, cree un AdminBundle o BackendBundle o lo que sea para su proyecto que tenga todas las herramientas que necesitará en el back-end, y use firewalls y listas de control de acceso en security.yml para crear rutas separadas para los dos.

No es necesario crear directorios de aplicaciones separados, meterse con el script de la consola ni nada por el estilo. De manera predeterminada, Symfony sabe cómo encontrar entidades y otros recursos para cualquier paquete que haya registrado, por lo que podrá compartirlos fácilmente.

Esta entrada de documentación sobre Seguridad es un buen lugar para comenzar a aprender sobre el control de acceso y los firewalls. Aquí hay una muestra rápida de cómo se ve mi configuración de seguridad:

firewalls: main: pattern: /.* anonymous: true form_login: true access_control: - { path: /admin/.*, roles: ROLE_ADMIN } - { path: /.*, roles: IS_AUTHENTICATED_ANONYMOUSLY }

Si desea una separación de autenticación completa para / y / admin, cree un nuevo firewall de administración: los firewalls no comparten información de autenticación entre ellos, de modo que puede rastrear a los usuarios y sus sesiones por separado si lo desea.


Qué tal tener una aplicación y crear tres paquetes, src / Vendor / BackendBundle, src / Vendor / FrontendBundle y src / Vendor / SharedBundle. SharedBundle contiene las entidades y otras partes compartidas entre FrontendBundle y BackendBundle