Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Li3:当子类调用Find()时,父类中的Find筛选器未触发_Php_Lithium - Fatal编程技术网

Php Li3:当子类调用Find()时,父类中的Find筛选器未触发

Php Li3:当子类调用Find()时,父类中的Find筛选器未触发,php,lithium,Php,Lithium,这是一个关于Li3哲学的问题。我有一个子类,试图在父类上运行find(),该父类作为其find()上的筛选器,但当子类调用find()时,不会执行该子类 我有一个成员模型,扩展了用户模式。 用户模型有一些过滤器: <?php # Users.php namespace app\models; class Users extends \lithium\data\Model { } Users::applyFilter('find', function($self, $params, $c

这是一个关于Li3哲学的问题。我有一个子类,试图在父类上运行
find()
,该父类作为其
find()
上的筛选器,但当子类调用
find()
时,不会执行该子类

我有一个
成员
模型,扩展了
用户
模式。
用户
模型有一些过滤器:

<?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 {
}
?>

我总是可以省略
Users
中的过滤器,并继承并覆盖
Users
模型中的
find()
save()
方法,这将导致调用
Members::find()
触发
Users::find()
,例如,但是Li3这样做的理念是什么呢?

我的观点是,如果过滤器中的代码实际上是用户模型的一部分,就像在做一些与用户业务规则相关的事情时一样,那么您应该覆盖
find()
save()

当您为
用户
类编写单元测试时,您可以轻松地为这些函数编写测试,而不必依赖那些未被清除的函数上的过滤器(这在单元测试期间很常见)


过滤器应保留用于横切功能,如日志记录

当你这样说的时候,这是有道理的:)谢谢你花时间回复。我想我会将密码散列、设置创建/更新的时间字段等移到重写的save()方法,而不是过滤器。
<?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');
    }
}
?>