Symfony

  • Nested CollectionType Form

    Example of nested collection forms TemplateType.php class TemplateType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder ->add(‘name’, TextType::class, [ ‘label’ => “Template Name”, ‘required’ => true, ‘attr’ => [ ‘class’ => ‘form-control’, ], ]) ->add(‘sentences’, CollectionType::class, [ ‘entry_type’ => SentenceType::class, ‘entry_options’ => [‘label’ => false], ‘label’ => false, ‘allow_add’ =>…

  • Get all duplicate records in table

    Slow variant: SELECT * FROM table t1 WHERE t1.domain_id = 1569 AND t1.is_active = 1 AND (t1.field IN (SELECT t2.field FROM table t2 WHERE t2.is_active = 1 GROUP BY t2.field HAVING COUNT(t2.field) > 1)) Faster variant: SELECT l0_.* FROM table l0_ inner join table n2 on n2.field = l0_.field where l0_.id n2.id AND l0_.is_active…

  • Nested Queries with Query Builder

    $queryBuilder = $this->createQueryBuilder(‘account_event’); $queryBuilder ->select(‘account_event.id AS AE_id’, ‘IDENTITY(account_event.event) AS event_id’, ‘account_event.dueDate as due_date’, ‘IDENTITY(account_event.account) AS account_id’) ->where( $queryBuilder->expr()->in( ‘account_event.id’, $this->createQueryBuilder(‘subquery_repository’) ->select(‘MAX(ae2.id)’) ->from(AccountEvent::class,’ae2′) ->andWhere(‘ae2.event IN (:events)’) ->andWhere(‘ae2.account IN (:accounts)’) ->andWhere(‘ae2.dueDate > DATE(:date)’) ->groupBy(‘ae2.account’) ->getDQL() ) ) ->setParameter(‘events’, $events) ->setParameter(‘accounts’, $accounts) ->setParameter(‘date’, $date->format(‘Y-m-d’)) ;

  • Fast Setup Virtual Machine and Symfony

    sudo dpkg –configure -a sudo apt-get install mysql-server apt-cache pkgnames | grep php7.3 php -r “copy(‘https://getcomposer.org/installer’, ‘composer-setup.php’);” php -r “if (hash_file(‘sha384’, ‘composer-setup.php’) === ‘a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1’) { echo ‘Installer verified’; } else { echo ‘Installer corrupt’; unlink(‘composer-setup.php’); } echo PHP_EOL;” php composer-setup.php php -r “unlink(‘composer-setup.php’);” sudo mv composer.phar /usr/local/bin/composer # run this if you are building…

  • RabbitMQ Work Queue with Symfony

    Add to .env RABBITMQ_HOST=localhost RABBITMQ_PORT=5672 RABBITMQ_USERNAME=test RABBITMQ_PASSWORD=test RABBITMQ_QUEUE_NAME=task_queue Add to services.yaml App\Command\WorkerCommand: arguments: [‘%env(RABBITMQ_HOST)%’, ‘%env(RABBITMQ_PORT)%’, ‘%env(RABBITMQ_USERNAME)%’, ‘%env(RABBITMQ_PASSWORD)%’, ‘%env(RABBITMQ_QUEUE_NAME)%’] App\Command\PublisherCommand: arguments: [‘%env(RABBITMQ_HOST)%’, ‘%env(RABBITMQ_PORT)%’, ‘%env(RABBITMQ_USERNAME)%’, ‘%env(RABBITMQ_PASSWORD)%’, ‘%env(RABBITMQ_QUEUE_NAME)%’]

  • Array to XML in Symfony

    Simple example how to convert Array to XML: public function toXML() { $array = [ ‘fields’ => [ ‘field’ => [ ‘@name’ => ‘name’, ‘@test’ => ‘test’, ‘#’ => 12345 ] ] ]; $xmlEncoder = new XmlEncoder(); $response = new Response(); $response->setContent($xmlEncoder->encode($array, ‘xml’)); $response->headers->set(‘Content-Type’, ‘xml’); return $response; }

  • Change cache directory in Symfony

    This task is really simple. You can achieve it from Kernel.php, getCacheDir method: public function getCacheDir() { // return $this->getProjectDir().’/var/cache/’.$this->environment; //Any location on your server return ‘/dev/shm/’.$this->environment; //This will cache in RAM }

  • Use Redis in Symfony

    Install redis server: sudo apt-get install redis-server Copy backup configuration file: sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.default Check if redis is installed correctly by: redis-cli

  • Symfony – Create a service – the right way

    Always create service interface for your service. This way you will have better structured code and phpunit testing will be real pleasure. Also use dependency injection for your repositories in the service. Service Interface Example interface UserServiceInterface{ public function getUsername(); public function viewAll(); } Service Example class UserService implements UserServiceInterface { private $entityManager; private…

  • Symfony Security Authorization

    There are several way to make authorization on your site with Symfony. First is in your security.yml on the same level as firewalls tag: access_control: – { path: ^/admin, roles: ROLE_USER } This will block all users that don’t have ‘ROLE_USER’ to admin page. Second option is to use Controller. Inside Method insert: if(!$this->get(‘security.authorization_checker’)->isGranted(‘ROLE_ADMIN’)){…