Li3: фильтр поиска в родительском классе не срабатывает, когда дочерние вызовы find ()

Это вопрос к философии Li3. У меня есть детский класс, пытаюсь запустить find() на родительском классе, который в качестве фильтра на его find() но это не выполняется, когда ребенок звонит find(),

у меня есть Members модель расширения Users Режим.
Users Модель имеет несколько фильтров:

<?php
# Users.php
namespace app\models;

class Users extends \lithium\data\Model {
}

Users::applyFilter('find', function($self, $params, $chain) {
echo __LINE__;
return $chain->next($self, $params, $chain);
});

Users::applyFilter('save', function($self, $params, $chain) {
echo __LINE__;
return $chain->next($self, $params, $chain);
});
?>

<?php
# Members.php
namespace app\models;

class Members extends \app\models\Users {
}
?>

Если я использую Members модель в любом контроллере и попытаться выполнить find() или save() на Membersфильтры не сработают.

<?php
# FooController.php
namespace app\controllers;

use app\models\Members;

class FooController extends \lithium\action\Controller {
public function bar() {
$bar = Members::find();
return compact('bar');
}

public function baz() {
$baz = Members::create();
$baz->save([
'type' => 'addiction',
'framework' => 'lithium'
]);
return compact('baz');
}
}
?>

Я всегда могу опустить фильтры в Users и наследовать + переопределить find() а также save() методы в Users модель, которая вызовет вызов Members::find() для запуска Users::find()Например, но какова философия Li3 при поступлении таким образом?

1

Решение

Я считаю, что если код в фильтрах на самом деле является частью вашей пользовательской модели, как, например, при выполнении действий, связанных с бизнес-правилом пользователя, вы должны переопределить find() а также save(),

И когда вы пишете модульный тест для User класс, вы можете легко написать тест для этих функций, не полагаясь на фильтры для тех функций, которые не очищаются (что может быть распространено во время модульного тестирования)

Фильтры должны быть зарезервированы для сквозных функций, таких как регистрация.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]