Un recorrido por las novedades que traerá Symfony 4 (cuando se publique en noviembre de 2017) y un primer vistazo a Symfony Flex, la nueva herramienta para crear y gestionar aplicaciones Symfony.
23. Un framework de bajo nivel
• Conlosaños,Symfonysehaido
convirtiendoenunframeworkdebajonivel.
• EstamosmáscercadePHPquedeofrecer
funcionalidadescompletas.
• Noesalgomalo,siemprequeincluyas
tambiénutilidadesdealtonivel.
32. Webpack Encore por dentro
• EstáprogramadoconJavaScript,noPHP.
• InternamentehaceusodeWebpack.
• Encorees"simplemente"unaformasencilla
deconfigurarWebpack.
34. Symfony + Webpack Encore
yarn / npm
Node.js
Webpack
Webpack Encore
Composer
PHP
Symfony
35. Webpack Encore en la práctica
• Soportatodoloqueseusaenaplicaciones
front-endmodernas(preprocessors,PostCSS,
React,Babel,VUE,sourcemaps,versioning,CDNs,hot
modulereplacements,etc.)
• Tambiénsirveparaaplicacionesclásicaso
sencillas(e.j.BootstrapyjQuery)
36. Definiendo los assets con Webpack Encore
package.json
webpack.config.js
assets/
app.scss
app.js
39. Paso 2: crear webpack.config.js
var Encore = require('@symfony/webpack-encore');
Encore
.setOutputPath('web/build/')
.setPublicPath('/build')
.autoProvidejQuery()
.enableSassLoader()
.addEntry('js/app', ['./assets/app.js'])
.addStyleEntry('css/app', ['./assets/app.scss'])
;
module.exports = Encore.getWebpackConfig();
40. Paso 3: crear tus propios SCSS y JS
@import "~bootstrap-sass";
body {
color: $primary-color;
// ...
}
assets/app.scss
import 'jquery';
import 'bootstrap-sass';
window.addEventListener('load', function () {
// ...
});
assets/app.js
41. Paso 4: generar los assets finales
// mientras desarrollas la aplicación en local
$ ./node_modules/.bin/encore dev
$ ./node_modules/.bin/encore dev --watch
// en el servidor de producción
$ ./node_modules/.bin/encore production
56. Creando un microservicio
$ symfony new mi-micro-servicio
Preparing project...
✔ Symfony 3.3.2 was successfully installed. Now you can:
* Change your current directory to /proyectos/mi-micro-servicio
* Configure your application in app/config/parameters.yml file.
* Run your application
Downloading Symfony...
5.8 MiB/5.8 MiB ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 100%
65. AHORA: src/Kernel.php
use SymfonyBundleFrameworkBundleKernelMicroKernelTrait;
use SymfonyComponentHttpKernelKernel as BaseKernel;
final class Kernel extends BaseKernel
{
use MicroKernelTrait;
public function getCacheDir();
public function getLogDir();
public function registerBundles();
protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader);
protected function configureRoutes(RouteCollectionBuilder $routes);
}
66. Conceptos que desaparecen en Symfony 4
• SymfonyStandardEdition
• SymfonyFull-StackFramework
• DistribucionesSymfony
• SensioDistributionBundle
72. Ventajas de la nueva estructura
• Más"plana"yfácildenavegar.
• Centralizacontenidosmanejadospor
personasajenasalbackend(assets/,templates/)
• DesacopladodeSymfony(assets/,src/,
templates/,web/)
78. El código se define bajo el namespace App
// src/Controller/UserController.php
namespace App;
use SymfonyBundleFrameworkBundleControllerController;
class UserController extends Controller
{
// ...
}
79. Los dos namespaces definidos por defecto
{
"...": "...",
"autoload": {
"psr-4": { "App": "src/" }
},
"autoload-dev": {
"psr-4": { "AppTests": "tests/" }
}
}
composer.json
96. Cómo carga Symfony 4 la configuración
namespace App;
use SymfonyBundleFrameworkBundleKernelMicroKernelTrait;
use SymfonyComponentConfigLoaderLoaderInterface;
use SymfonyComponentDependencyInjectionContainerBuilder;
use SymfonyComponentHttpKernelKernel as BaseKernel;
final class Kernel extends BaseKernel
{
use MicroKernelTrait;
// ...
protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void
{
$confDir = dirname(__DIR__).'/etc';
$loader->load($confDir.'/packages/*.{php,xml,yaml}', 'glob');
if (is_dir($confDir.'/packages/'.$this->environment)) {
$loader->load($confDir.'/packages/'.$this->environment.'/**/*.{php,xml,yaml}, 'glob');
}
$loader->load($confDir.'/container.{php,xml,yaml}', 'glob');
}
}
110. Compatibilidad de Symfony Flex
SYMFONY
3.2
SYMFONY
3.3
SYMFONY
3.4
SYMFONY
4.0
SYMFONY
4.1
NO funciona SI funciona
Se usa por defecto
(pero sigue siendo opcional)
129. Crear un proyecto Symfony SIN Flex
$ symfony new mi-proyecto/
ȭ 10 segundos
✔ Symfony 3.3.2 was successfully installed. Now you can:
* Change your current directory to /proyectos/mi-micro-servicio
* Configure your application in app/config/parameters.yml file.
* Run your application
130. Crear un proyecto Symfony CON Flex
$ composer create symfony/skeleton mi-proyecto
ȭ 1 minuto
What's next?
* Run your application:
1. Change to the project directory
2. Execute the make serve command;
3. Browse to the http://localhost:8000/ URL.
* Read the documentation at https://symfony.com/doc
131. Código PHP en vendor/
*se incluyen todos los tests
106,3551,546
archivos líneas de código
132. Symfony 3.2 vs Symfony 3.3 + Flex
106,3551,546
archivos líneas de código
362,5645,274
-70% -70%
168. Paso 3: instala las dependencias
$ cd tu-proyecto/
$ composer install
169. Paso 3: instala las dependencias
$ cd tu-proyecto/
$ composer install
TRUCO
Esto hará que Symfony Flex genere
todos los archivos de configuración
en etc/packages/*.yaml
170. Paso 4: Retoca la configuración si hace falta
Compruebaloscontenidosdeconfig.yml,
config_dev.ymlyconfig_prod.ymlycopiala
configuraciónquehagafaltaenlosnuevos
archivosetc/packages/*.yaml
171. Paso 4: Retoca la configuración si hace falta
Compruebaloscontenidosdeconfig.yml,
config_dev.ymlyconfig_prod.ymlycopiala
configuraciónquehagafaltaenlosnuevos
archivosetc/packages/*.yaml
CUIDADO
Esta es la parte más aburrida y
donde más fácilmente se pueden
cometer errores.
172. Paso 5: Mueve tu código a src/
• Mejorcaso:todotucódigoestáenAppBundle
Copiaelcódigodirectamenteensrc/ycambiael
namespacedeAppBundleaAppconPHPStorm
• Peorcaso:tienesmuchosbundles
Puedesmantenerlos(cambiandoelnamespaceaApp)
perodeberíasirplanteándoteeliminarlos
176. ¿Por qué usas Silex en vez de Symfony?
• Másrendimiento
• Menoscódigo
• Menosdependencias
• Menosconfiguración
177. Silex vs "Viejo Symfony"
Silex Viejo Symfony
Más Rendimiento
Menos Dependencias
Menos Líneas de código
Menos Configuración
Más Funcionalidades RAD
Mejor Ecosistema
178. Silex vs "Nuevo Symfony" (Flex)
Silex Nuevo Symfony
Más Rendimiento
Menos Dependencias
Menos Líneas de código
Menos Configuración
Más Funcionalidades RAD
Mejor Ecosistema