Response:
Devolver un Archivo PDF
use Symfony\Component\HttpFoundation\BinaryFileResponse;
//..
return new BinaryFileResponse('/path/al/archivo.pdf');
JSON Response
use Symfony\Component\HttpFoundation\JsonResponse;
//..
$response = new JsonResponse();
$response->setData(array(
'data' => 123
));
return $response;
Cache:
Cambiar permisos:
Symfony 2:
$ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1`
$ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs
$ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs
#Comandos anteriores en una sola linea
HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1`;setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs;setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs;
Symfony 3:
$ HTTPDUSER=`ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1`
$ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var
$ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var
#Comandos anteriores en una sola linea
HTTPDUSER=`ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1`;setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var;setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var;
Doctrine:
Dump
echo '<pre>';
\Doctrine\Common\Util\Debug::dump($entities);
echo'</pre>';
Controller:
Dump
//$variable = Variable a imprimir
//$this = El controlador
dump($variable, $this);
Twig:
Dump
//variable = Variable a imprimir
//Se puede no pasar una variable e imprime todas las variables que existen en el template
{{ dump(variable)}}
Crear proyecto en Symfony 4
//Opcion 1
$ composer self-update
$ composer create-project symfony/skeleton my_project
//Opcion 2
$ symfony new my_project
$ cd my_project
$ symfony check:req
$ php -S 127.0.0.1:8000 -t public
//Symfony 5 no necesario
$ git init
$ git add .
$ git commit
//Symfony 5 no necesario
$ composer require server
$ composer require annotations
$ composer require twig
$ composer require asset
$ composer require profiler –dev
$ composer require debug
//Descarga el pack ORM
$ composer require orm
//Entonces podemos obviar estos comandos
$ composer require doctrine
//Fin Entonces podemos obviar estos comandos
$ composer require stof/doctrine-extensions-bundle
$ composer require orm-fixtures –dev
$ composer require zenstruck/foundry –dev //permite crear fixtures con factories
$ composer require maker –dev
$ composer require form validator twig-bundle security-csrf annotations
$ composer require nesbot/carbon -> para mostrar fechas al estilo «hace 2 dias»
$ composer require knplabs/knp-time-bundle -> para mostrar fechas al estilo «hace 2 dias»
$ composer require test –dev
Paginación:
$ composer require knplabs/knp-paginator-bundle
Traducciones:
$ composer require symfony/translation
Front End:
$ composer require encore
$ yarn install
$ ./node_modules/.bin/encore dev –watch
//$ ./node_modules/.bin/encore dev-server Esto hace que los archivos se generen en el server lo que hace
//que se generen automaticamente pero sin el efecto secundario de renderizar la pagina sin que esten listo y
//ademas refresca con los cambios
$ yarn add eslint –dev
$ touch .eslintrc.js
Agrega este contenido dentro de .eslintrc.js
module.exports = {
extends: [‘eslint:recommended’],
parserOptions: {
ecmaVersion: 6,
sourceType: ‘module’,
ecmaFeatures: {
jsx: true
}
},
env: {
browser: true,
es6: true,
node: true
},
rules: {
«no-console»: 0,
«no-unused-vars»: 0
}
};
Ir a settings en PHP storm, buscar eslint y habilitarlo
//Validar con eslint el código
$ ./node_modules/.bin/eslint assets/
Inside webpack.connfig.js make this change
//.enableSingleRuntimeChunk()
.disableSingleRuntimeChunk()
Para importar entradas en twig
{{ encore_entry_css_files(‘app’) }}
{{ encore_entry_js_files(‘app’) }}
Twig extensions:
$ composer require twig/extensions
Activar la extension que queremos utlizar en el archivo config/packages/twig_extensions.yml
Doctrine:
$ ./bin/console doctrine:database:create
$ ./bin/console make:entity
$ ./bin/console make:migration // crea un archivo con las consultas sql para crear las tablas en la base de datos, conviene añadir estos archivos en git
$ ./bin/console doctrine:migrations:migrate // ejecuta el archivo migrations y va iterando entre las versiones de estos archivos
$ ./bin/console doctrine:migration:status
TESTING
composer require –dev phpunit/phpunit symfony/test-pack
FIXTURES
//Fake fixtures
$ composer require zenstruck/foundry –dev
$ symfony make:factory
//Crear fixtures
$ ./bin/console make:fixtures
// Cargar fixtures
$ ./bin/console doctrine:fixtures:load
//Ejecutar una consulta directamente en la base de datos
$ ./bin/console doctrine:query:sql ‘Select * from products’
PHPStorm Y Symfony
1. Instalar Symfony plugin
2. Instalar PHP annotations plugin
3. PHP Toolbox plugin
4. Buscar Symfony plugin y hacer click en el check «Enable plugin for this project»
5. Buscar «composer» y seleccionamos el archivo composer de nuestro proyecto
Symfony Server
$ symfony serve
$ symfony serve -d //correrlo como demon
$ symfony local:serve:stop
Comandos utiles
1. Lista de servicios disponibles
./bin/console debug:autowiring
//Todos los servicios en el contenedor
./bin/console debug:container --show-private
2. Ver la configuracion de un servicio
./bin/console config:dump NOMBRE_DEL_BUNDLE
3. Ver las variables de entorno
./bin/console about
php bin/console debug:container –env-vars
php bin/console debug:container –env-vars -e test
Security
Obenert contraseña encodeada
./bin/console security:encode-password
Crear un voter
./bin/console make:voter
Crear un normalizer:
./bin/console make:serializar:normalizer
Crear un validator
./bin/console make:validator
Easy Admin:
Dump
$ composer require admin