Quiero validar un campo mediante la rules del modelo con la opcion de whenClient pero no aplica nada

public function scenarios()
{
$scenarios = parent::scenarios();
/**
* EL ESCENARIO POR DEFECTO ES default
* ESCENARIOS CREADOS
*/
$scenarios[self::SCENARIO_DEFAULT_PRIMERA] = [‘ayuda’, ‘observacion’];
$scenarios[self::SCENARIO_DEFAULT_SEGUNDA] = [‘ayuda’, ‘subayuda’, ‘observacion’];
$scenarios[self::SCENARIO_CONSULTA_MEDICA] = [‘ayuda’, ‘especialidad’, ‘centro’, ‘fechacita’, ‘observacion’];
$scenarios[self::SCENARIO_ESTUDIO_MEDICO] = [‘ayuda’, ‘subayuda’, ‘centro’, ‘fechacita’, ‘observacion’];
$scenarios[self::SCENARIO_TERAPIA_MEDICA_COMPLEMENTARIA] = [‘ayuda’, ‘especialidad’, ‘centro’, ‘fechacita’, ‘observacion’];
return $scenarios;
}

/**
 * {@inheritdoc}
 */
public function rules()
{
    return [
        //[['ayuda', 'observacion'], 'required', 'message'=>'Este campo no puede estar vacio!!'], // ESCENARIO POR DEFECTO default
        [
            ['ayuda', 'observacion'],
            'required',
            'when' => function($model){
                var_dump(in_array($model->ayuda,['169', '182', '260', '279', '291']));die;
                return in_array($model->ayuda,['169', '182', '260', '279', '291']);
            },
            'whenClient' => "function(attribute, value){
                console.log('paso por aca');
                document.querySelector('#' + attribute.id).style.display = 'block';
            }",
            'on'=>self::SCENARIO_DEFAULT_PRIMERA,
            'message'=>'Este campo no puede estar vacio!!'
        ],

en la vista este es el campo que quiero que no oculte despues de validar.

<?= $form->field($seguimiento_form, 'subayuda')->dropDownList( ArrayHelper::map($catalogo_ayuda, 'id_cat_status', 'nombre_status'), ['prompt' => '---- Seleccione ----', 'class' => 'form-control input-md'] ) ?>

el detalle esta, en que cuando uso whenClient no hace nada, si pudieran ayudarme a saber como se aplica bien.

A ver, no sé si lo he entendido muy bien.

Si quieres validar un campo con whenClient, tienes que devolver true o false, y no parece que devuelvas nada.

Ten en cuenta que when se valida en el servidor, y whenClient en javascript, así que para que el campo subayuda se valide con valores (creo que eso quieres hacer)

'whenClient' => "function (attribute, value) {
    return ['array', 'de', 'valores'].includes($('#seguimientoform-ayuda').val());
}",

Algo así.

Luego está lo de que aparezca o desaparezca el campo. Eso no lo puedes (bueno, a mala leche seguramente sí) hacer con whenClient, porque valida pero no controla la visibilidad, creo. Además debes ocultar el contenedor, no el input.

Yo iría estilo KISS por un javascript.

$('#seguimientoform-ayuda').on('change', function () {

    var visible = ['array', 'de', 'valores'];

    if (visible.includes($(this).val())) {
        $('.field-seguimientoform-subayuda').show();
    } else {
        $('.field-seguimientoform-subayuda').hide();
    }

});

Y a tomar viento xD

Dime si es esto o lo he entendido mal.