2015-04-07 5 views
0

Я пытаюсь отфильтровать часть входных данных, но хотел бы сделать это без анонимной функции. Первый пример ниже, но второй пример возвращает указанную ошибку. Я не хочу, чтобы пара дюжины строк кода проверки сидела непосредственно внутри моих правил, поэтому я хотел бы, чтобы это было сделано (как во втором примере, который я пытаюсь реализовать.Yii2 Пользовательское правило фильтра без анонимной функции

Пример 1 (работает, но не работает то, что я хочу сделать)

public function rules() 
{ 
    return [ 
     ['roles', 'filter', 'filter' => function ($value) { 
      // Do some stuff to remove invalid roles 
      return $value; 
     }]; 
} 

Пример 2 (не работает, но это то, что я хотел бы сделать)

public function rules() 
{ 
    return [ 
     ['roles', 'filter', 'filter' => 'checkRoles'], 
    ]; 
} 

public function checkRoles($value) 
{ 
    // Do some stuff to remove invalid roles 
    return $value; 
} 

Ошибка возвращается в примере 2 выше

call_user_func() expects parameter 1 to be a valid callback, 
    function 'validateRoles' not found or invalid function name 

Почему второй пример выше не работает? Вернее, что более важно, что мне нужно изменить, чтобы получить второй пример?

ответ

0

Вы должны использовать правильный обратный вызов, например :

public function rules() 
{ 
    return [ 
     ['roles', 'filter', 'filter' => [$this, 'checkRoles']], 
    ]; 
} 

Подробнее: http://php.net/manual/language.types.callable.php

+0

Точно, что мне нужно, спасибо! Английская ссылка для тех, кто интересуется http://php.net/manual/en/language.types.callable.php – justinvoelker

0

Вы, возможно, придется использовать структуру, как это:

'filter' => array($this, 'checkRoles') 
+0

Это не дает ответа на этот вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. – Jagger

+0

Что вы имеете в виду? Это тот же ответ, что и «Правильно», нет? Или вы имеете в виду, что ожидается публикация полного тела функции? – deeptowncitizen

+1

Вы использовали слово «возможно» в своем ответе. Если вы не уверены, правильный ответ или нет, отправьте его как комментарий. – Jagger

Смежные вопросы