Symfony - Ce que j'aurais aimé savoir plus tôt, partie 2

Si vous ne l'avez pas encore lu, il existe un premier épisode de cette série d'articles.

HTTP Client - Scoping client

La clé de configuration framework.http_client.scoped_clients permet de définir et de configurer des endpoints que vous requêtez régulièrement. L'avantage est d'obtenir des services déjà configurés. On se concentre sur les spécificités de la requête uniquement.

# config/packages/framework.yaml
framework:
    # ...
    http_client:
        scoped_clients:
            gitlab:
                base_uri: '%env(resolve:GITLAB_ENDPOINT)%'
                headers:
                    Private-Token: '%env(resolve:GITLAB_TOKEN)%'
# ...
use Symfony\Contracts\HttpClient\HttpClientInterface;
# ...
    public function __construct(
        private HttpClientInterface $gitlab,
    ) {
    }

    public function doSomething() {
        $this->gitlab->request('GET', '/users');
    }
# ...

https://symfony.com/doc/6.0/http_client.html#scoping-client

PHPStorm - Logs

Je suis tombé sur l'article "A quick way to browse Symfony Logs with PHPStorm", publié dans la série A week of Symfony. Il est possible de paramétrer le formatage des logs Symfony sur PHPStorm. Cela permet notamment de faire ressortir certains "types" de logs.

Je n'ai pas réussi à le faire fonctionner tel que rédigé dans l'article. En revanche, celui-ci relaie le repository dszczer/ideolog-symfony-format en guise de cheahsheet qui contient un "message pattern" différent, qui lui fonctionne pour ma part.

Forms - Actions Methods

Il est possible de surcharger la méthode HTTP d'un formulaire (par défaut POST) directement dans twig.

{# templates/task/new.html.twig #}
{{ form_start(form, {'action': path('target_route'), 'method': 'DELETE'}) }}

https://symfony.com/doc/6.0/forms.html#changing-the-action-and-http-method

VarDumper - ctrl/cmd

La combinaison ctrl/cmd + clic permet d'agrandir et de réduire tous les enfants issus d'un dump() sur le rendu HTML.

Doctrine - findOneBySlug

find(), findBy(), findOneBy() et findAll() ne sont pas les seuls finders disponibles par défaut avec Doctrine. L'EntityRepository fournit des "magic finders". Par exemple, si votre entité possède une propriété nickname, vous pouvez écrire ceci:

$user = $userRepository->findOneBy(['nickname' => 'romanb']);

// __call magic
$user = $userRepository->findOneByNickname('romanb');

https://www.doctrine-project.org/projects/doctrine-orm/en/2.10/reference/working-with-objects.html#by-simple-conditions

Console - bin/console about

Il existe une commande bin/console about qui donne de nombreuses informations sur l'environnement en cours (version symfony et php, le charset du kernel...).

Flex - Force recipes synchronisation

Il peut parfois être nécessaire de "re-synchroniser" son symfony.lock. La commande composer sync-recipes --force peut vous aider à cela. https://symfony.com/blog/new-in-symfony-flex-1-2

Vous en voulez plus ? Il existe un article dans le même ADN que ma série, https://locastic.com/blog/symfony-tips-and-tricks/.