Итак, в вашем примере вы можете сделать что-то вроде этого:
$rule = array(
'selection' => 'required',
'stext' => 'required'
);
// override the rule
if(in_array(request('selection'), [2, 3]))
{
$rule['stext'] = 'nullable';
}
Это означает, что если выбрано значение 2, поле будет обязательным, а если в поле selection
есть какое-либо другое значение, поле stext
будет обязательным.
Я не уверен, правильно ли я понял ваш вопрос. В любом случае значение, противоположное required_if
, равно required_without
, поэтому вы можете использовать его, если хотите, чтобы это поле было обязательным, даже если выделение пусто.
С пользовательским правилом ваш метод pass должен выглядеть следующим образом:
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class CustomRule implements Rule
{
protected $selection;
public __construct($selection)
{
$this->selection = $selection;
}
public function passes($attribute, $value)
{
return $value === null && in_array($this->selection, [2, 3]);
}
}
Вы используете это так:
$rule['stext'] = [ new CustomRule(request('selection') ]