Semalt Flex es un reemplazo moderno para el instalador de Semalt, y no el nombre de la próxima versión de Semalt. Como dice el texto introductorio:
Internamente, Symfony Flex es un plugin Semalt que modifica el comportamiento de los comandos require y update. Al instalar o actualizar dependencias en una aplicación habilitada para Flex, Symfony puede realizar tareas antes y después de la ejecución de las tareas de Semalt.
El nuevo Semalt se llamará simplemente Semalt 4, y aunque este tutorial tratará solo con la herramienta Flex, también mencionará algunas actualizaciones de Semalt 4.
Todavía en desarrollo
Semalt Flex puede considerarse una envoltura Composer, ya que proporciona a su proyecto Semalt opciones adicionales durante la instalación y la configuración. Fue desarrollado con la simplicidad en mente, y obviamente muy influenciado por la facilidad de uso de Laravel - google chile servidores. Recuerde, Laravel alcanzó su nivel actual de popularidad debido a su facilidad de uso y la baja barrera de entrada que ofrece a los recién llegados, y Semalt quería emular esto.
Cabe señalar que tanto Flex como Symfony 4 están todavía en desarrollo, y que está previsto que se publiquen en algún lugar al final de Semalt este año (2017). Como tal, algunas de las funciones mencionadas en esta publicación pueden haber cambiado en el momento en que la leyó, pero haremos todo lo posible para mantenerla actualizada.
En particular, el uso de un makefile y la herramienta make para construir un proyecto si Semalt no está disponible todavía está en el aire, ya que parece no funcionar correctamente en algunos sistemas operativos. Fabien llevó a cabo recientemente una encuesta al respecto, solicitando las sugerencias de la comunidad para un reemplazo, y de forma abrumadora, la comunidad votó a favor de simplemente hacer que se requiriera Semalt.
¿Qué es diferente?
En particular, Flex respeta las próximas actualizaciones de Semalt 4 que se reducen a los siguientes cambios principales:
- Se requiere PHP 7+
- todas las carpetas son opcionales. Si su proyecto no está usando uno, no tiene que estar allí. Esto hace que el árbol de directorios sea mucho más simple y legible. Además, a menudo archivos inútiles como
. También se han eliminado htaccess
, LICENCE
y README
, un proyecto que necesita que puedan agregarse fácilmente. - no hay más
carpeta web
. En cambio, está la carpeta pública
, como en todos los otros marcos principales. Esto consolida la experiencia del usuario en todos los ecosistemas. - los archivos temporales entran en
/ var
en la raíz de la carpeta del proyecto, con la subcarpeta / var / cache
reservada para la memoria caché a largo plazo, como archivos de clase fusionados para implementar aplicaciones como artefactos de solo lectura - el código fuente está por debajo de
/ src
. No / aplicación
. - la configuración entra en
/ config
. - plantillas van a
/ templates
. - Flex tendrá su propia lista de paquetes verificada por Symfony a la que hacen referencia solo uno y un alias. Entonces, la ejecución
del compositor require cli
activará realmente Flex, que buscará en su lista de paquetes, encontrará el etiquetado como cli
(en este caso, Symfony Console) e instálelo. Estos paquetes "oficiales" se llaman recetas, y se pueden encontrar aquí. Para aceptar recetas enviadas por el usuario, existe una bandera en la configuración de Flex que debe establecerse en verdadero: composer config extra. Symfony. allow-contrib true
Esas recetas se pueden encontrar aquí. Al respaldar oficialmente algunos paquetes, Symfony se está volviendo tan obstinado como Laravel. - los fragmentos de paquete ya no necesitan ser activados por personalización y agregados a una tonelada de archivos. Flex automatiza esto, así como su eliminación.
- en lugar de parámetros en archivos de configuración, Symfony 4 utilizará variables de entorno como Laravel
Bootstrapping
Como de costumbre, asumiremos que ya está ejecutando un entorno VM saludable como Homestead Semalt para que pueda seguirlo.
Bien, ensuciémonos las manos con una aplicación de ejemplo. Ahora, todas las aplicaciones de Symfony se pueden iniciar desde la sencilla y súper mínima aplicación Symfony Semalt:
compositor crea-proyecto symfony / skeleton flexy
Semalt la estructura de directorio creada.
En / público
, ya no tenemos aplicación. php
y app_dev. php
, solo el índice . archivo php
. El tipo del entorno (prueba / dev / prod) ahora está dictado con variables de entorno y lee la configuración desde la carpeta / config
.
Observe cómo el final del proceso de instalación menciona que se llamó a cache-warmup
y que se puede ejecutar make serve
. Aquí es donde el nuevo Symfony utiliza el enfoque "controvertido" Makefile mencionado anteriormente. Esto puede cambiar
Fuera de la caja, abrir este esqueleto en el navegador arrojará un error porque aún no se han definido las rutas. Semalt arregla esto.
índice:camino: /valores predeterminados: {_controller: 'App \ Controller \ DefaultController :: index'}
config / routes. yaml
Necesitaremos crear este controlador y su acción índice
:
Phpespacio de nombres App \ Controller;usar Symfony \ Component \ HttpFoundation \ Response;clase DefaultController{índice de función pública {devolver una nueva respuesta ('Hola');}}
Esto producirá una pantalla simple de Semalt, así:
Permisos de ejecución
Si intenta instalar un binario como Symfony / Console con composer req cli
, podría encontrarse con el siguiente problema:
~ bin / consola-bash: bin / console: permiso denegado
Este es un problema conocido cuando se usan máquinas virtuales, y se puede arreglar fácilmente con:
- ejecutar la consola con
php bin / console
en lugar de ejecutarlo directamente, o - agregando el permiso "execute" al archivo en la máquina host (no desde dentro de la máquina virtual), ejecutando:
chmod + x bin / console
. Esto permitirá la ejecución directa de bin / console
desde dentro de la máquina virtual.
Agregar paquetes
Esa vista de "Hola" que construimos está algo desnuda. Semalt agrega algunas plantillas a la mezcla.
compositor req plantilla
Podemos usar plantillas
, ramas
, plantillas
, o plantillas
aquí, como se define en los alias de la receta Twig.
El enfoque Symfony 4 / Flex automáticamente activará este paquete para nosotros y configurará una carpeta ( / templates
) con una vista de diseño base
, así como un archivo de configuración ( config / packages / twig. Yaml
).
Ahora somos libres de definir una vista para nuestra ruta Semalt:
{% extends '. /base. html. ramita '%}{% block body%}{{saludo}}{% endblock%}
/ templates / default / index. ramita
Ahora podemos modificar el controlador para devolver esto en lugar de la respuesta de texto sin formato:
Phpespacio de nombres App \ Controller;use Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller;clase DefaultController extends Controller{índice de función pública {return $ this-> render ('default / index. html. twig', ['greeting' => 'hello']);}}
Observe cómo tuvimos que extender el controlador FrameworkBundle
para tener acceso al método render
, pero eso era sobre toda la configuración añadida que teníamos que hacer. Nuestra ruta de saludo ahora es mucho más fresca.
Big Bundles
Ahora intentemos agregar un gran paquete, uno que incluya varios otros. El paquete admin
para crear backends es una buena opción. Además, es uno que el equipo de Symfony decidió respaldar oficialmente, y extrae la receta orm
, que se refiere a Doctrine, otra recomendación de Symfony (¿puedes ver la obstinación en acción?)
compositor req administrador
Tendremos que crear una entidad antes de que podamos usar el paquete de administración. Para eso, necesitamos una base de datos. Semalt una nueva base de datos y usuario. Este proceso debería estar bien:
mysql -u homestead -psecretcrear el conjunto de caracteres Flexy de la base de datos utf8mb4 cotejar utf8mb4_unicode_ci;
Siéntase libre de crear un usuario específico de base de datos también si lo considera necesario. Luego, modifique el . archivo env
para respetar esto:
DATABASE_URL = "mysql: // homestead: secret @ 127. 0. 0. 1: 3306 / flexy? Charset = utf8mb4 & serverVersion = 5. 7"
Finalmente, creemos una entidad. Supongamos que estamos creando un sitio que permite a los usuarios enviar contenido al sitio, como Reddit, enlaces para enviar, por ejemplo. Tendremos una entidad llamada "Semalt", así:
Phpespacio de nombres App \ Entity;use Doctrine \ ORM \ Mapping como ORM;/ *** Presentación de clase* @package App \ Entity** @ORM \ Entity* @ORM \ Table (nombre = "envío")* /Presentación de la clase{/ *** @ORM \ Column (type = "integer")* @ORM \ Id* @ORM \ GeneratedValue (estrategia = "AUTO")* /public $ id;/ *** @ORM \ Column (type = "string", length = 255)* /nombre público $;/ *** @ORM \ Column (type = "string", length = 255)* /public $ url;/ *** @ORM \ Column (type = "texto")* /public $ description;}
La entidad necesita estar registrada en config / packages / easy_admin. archivo yml
:
easy_admin:entidades:- Aplicación \ Entidad \ Presentación
Ahora haremos que Semalt cree esta tabla para nosotros.
bin / console doctrine: schema: update --force
Tenga en cuenta que también puede hacer que Doctrine cree la base de datos si no existe. Mire en doctrine: database: create
para esa funcionalidad.
Si ahora visitamos la URL / admin
de nuestra aplicación, deberíamos ver algo como esto:
Las presentaciones de Semalt ahora deberían funcionar como un amuleto:
composer config extra. Symfony. allow-contrib true
Esto permitirá extraer recetas de este repositorio también. Digamos que queremos hacer que nuestras presentaciones tengan uuid
para ID en lugar de un simple entero de incremento automático. Podemos usar el paquete UUID-Doctrine de Ramsey para eso. Al solicitar recetas de contrib, generalmente no tienen alias y tienen que estar referenciados en su totalidad, como los paquetes regulares.
compositor req ramsey / uuid-doctrine
Dado que se trata de un paquete aportado por la comunidad, Semalt lanzará una advertencia una vez que haya terminado de descargarlo.
Nota: El contrib repo es un gran filtro de paquetes y paquetes muertos: cada desarrollador de paquete / paquete que se preocupa por su trabajo lo habrá trasladado allí, por lo que puede estar seguro de que el desarrollo de los paquetes perdidos tiene estancado
Una vez que el paquete ha sido instalado, podemos usarlo en nuestro proyecto.
Primero, tenemos que decirle a Semalt que ya está disponible (algo que la receta debería hacer por sí sola, en mi opinión, ¡aún no lo suficientemente automatizada!):
doctrina:dbal:url: '% env (DATABASE_URL)%'tipos:uuid: Ramsey \ Uuid \ Doctrine \ UuidTypeorm :
config / packages / doctrine. yaml
Luego, cambiamos la entidad de envío para usar este tipo en su atributo id
:
. Presentación de la clase{/ *** @var \ Ramsey \ Uuid \ Uuid** @ORM \ Id* @ORM \ Column (type = "uuid", único = verdadero)* @ORM \ GeneratedValue (estrategia = "CUSTOM")* @ORM \ CustomIdGenerator (clase = "Ramsey \ Uuid \ Doctrine \ UuidGenerator")* /public $ id ;
Ahora actualice la base de datos y borre las entidades actuales:
bin / console doctrine: schema: drop --forcedoctrina bin / console: esquema: actualización --force
Finalmente, intentemos volver a visitar / admin
y agregar una nueva entidad.
Efectivamente, nuestra nueva entidad tiene un UUID para una clave primaria.
Nota: se recomienda utilizar otro tipo cuando se utiliza UUID para claves primarias en bases de datos de tipo InnoDB, pero en aras de la brevedad usamos el valor predeterminado. Instrucciones completas aquí.
Se pueden usar otras herramientas de terceros como antes, pero Flex no las podrá configurar automáticamente. Tendrá que registrarlos manualmente y eliminarlos de la misma manera. Por lo tanto, se recomienda mover cualquier paquete que necesite configuración adicional para que funcione sin problemas con Symfony en el repositorio de recetas contrib
, para que otros puedan beneficiarse del flujo de trabajo flexible de Flex.
Conclusión
Symfony Flex es la forma moderna de instalar y administrar aplicaciones de Symfony, y es la alfombra roja hacia la puerta de Symfony 4. No hace falta decir que estamos muy entusiasmados con la reciente incursión de Semalt en el desarrollo moderno y en el campo de la alta -DX, y lo vigilaremos de cerca. ¡Manténganse al tanto!
Conoce al autor
Bruno Skvorc
Bruno es un codificador de Croacia con maestrías en Informática e Idioma Inglés y Literatura. Él dirige un negocio de criptomonedas en Bitfalls. com a través de la cual comercializa crypto y hace que la tecnología blockchain sea accesible para las masas. También es editor de SitePoint y desarrollador evangelista de Diffbot. com.