Întrebare legată de Symfony validator în context PHPUnit

m-a întrebat un prieten pe whatsapp, și n-am știu ce să-i răspund, așa că am zis să dau mai departe întrebarea, for the sake of conversation:

deci… pe aceeasi masina, cu acelasi PHP, daca evaluez metadate sau daca fac validare pe un request web, merge, le vede, le citeste, le interpreteaza si le aplica
pe aceeasi masina, intr-un test automat pe care-l rulez, acelasi fisier de clasa, cu acelasi PHP nu-mi mai vede atributele

namespace App\Request;

use Symfony\Component\Validator\Constraints as Assert;

class TwilioIncomingCallRequest extends TwilioBaseRequest
{
    //////////////
    // Mandatory params
    //////////////
    
    #[Assert\Type('string')]
    #[Assert\NotBlank]
    protected $CallSid;

    public function getCallSid()
    {
        return $this->CallSid;
    }

public function validate(): ConstraintViolationListInterface
    {
        return $this->validator->validate($this);
    }

și când încearcă:

$request = new TwilioIncomingCallRequest($validator, $this->twilioService);
            print_r($validator->getMetadataFor(TwilioIncomingCallRequest::class)); die();

rezultă în context CLI:

Symfony\Component\Validator\Mapping\ClassMetadata Object
(
    [constraints] => Array
        (
        )

    [constraintsByGroup] => Array
        (
        )

primul gând a fost că e setat aiurea în configul de symfony, dar nu pare:

framework:
    validation:
        email_validation_mode: html5

        # Enables validator auto-mapping support.
        # For instance, basic validation constraints will be inferred from Doctrine's metadata.
        #auto_mapping:
        #    App\Entity\: []

when@test:
    framework:
        validation:
            not_compromised_password: false

any ideas?

1 Like

Nu am folosit atribute până acum, dar mi s-a întâmplat să am rezultate diferite în FPM vs CLI

Sigur este aceeași versiune de PHP? Poți avea o versiune în CLI, o altă versiune în web.

Pe lângă asta, php.ini poat fi diferit în CLI vs web.

da, ăsta a fost și primul meu gând. problema e că în dev mode merge, în prod mode merge, numai în test mode nu vrea.

local și prod au versiuni diferite de php, însă pe local, cu aceeași versiune de php… dev merge, prod merge, test nu vrea.

Cred ca un php -i in cli ar putea răspunde la câteva întrebări, sa vadă ce diferențe de setări sunt între cele doua…

Poate e o combinatie de variabile de env luate din phpunit.xml

Da-mi DM cu date de contact si-l ajut prin zoom

1 Like

follow-up.

problem solved.

reason: classic PEBCAK

citez:

eu instantiam validatorul in teste cu Validation::createValidator(), ceea ce omitea cumva contextul. daca luam validatorul injectand serviciul corespunzator din container, mergea; asta era diferit între web / prod context și test / local context

so, dragii moșului, nu, în aplicațiile Symfony: you don’t just instantiate a service, you use the DIC for that.

2 Likes