Rules required: Name or Firstname

Hi everyone,

In a model form, I’d like to know how to put either name or firstname required. Not both. I tried this tip but it doesn’t work.

Have you any ideas ?




return [

            [['customerName', 'mail'], 'required'],

            [['mail'], 'email'],

            [['name'], 'required', 'when' => function($model) {

                return empty($model->$firstname);

            },

            'enableClientValidation' => false,

            'message' => 'Vous devez compléter le nom ou le prénom de l\'utilisateur avant de valider le formulaire.'

            ],

]



Regards

Try this:




    return [

        [['name', 'firstname'], 'oneMustBeSetValidator'],

    ]


    public function oneMustBeSetValidator($attribute, $params)

    {

        if (!$this->hasErrors()) {

            if(empty($this->name) && empty($this->firstname)) {

                $this->addError($attribute, 'Name or firstname must be set.');

            }

        }

    }



Unfortunately it doesn’t work.

What is exactly not working. The customized function by @umneeq fix your needs.

I mean the form is posted even if both fields are empty.




        public function rules()

	{

		return [

            [['nomClient', 'mailClient'], 'required'],

            [['mailClient'], 'email'],

            [['nomUser', 'prenomUser'], 'oneMustBeSetValidator'],

		];

	}






    public function oneMustBeSetValidator($attribute, $params)

    {

        if (!$this->hasErrors()) {

            if(empty($this->nomUser) && empty($this->prenomUser)) {

                $this->addError($attribute, 'Vous devez compléter le nom ou le prénom de l\'utilisateur avant de valider le formulaire.');

            }

        }

    }



I’m still interested by the solution. Any other ideas ?