【问题标题】:Cakephp component startup for helperCakephp 组件启动助手
【发布时间】:2014-11-25 17:23:40
【问题描述】:

是否有一些替代方法可以在帮助器中使用,类似于在组件中启动。实际上我需要在辅助方法调用之前设置一些设置,这是基于被调用的方法。所以,我需要检测调用了哪个方法并设置我需要的,这将在辅助方法本身中使用。

蛋糕 2.x

更新

helper的构造函数相当于组件的initialize方法,而不是启动,例如当我把它放在我的助手中时

public function __construct($View, $settings = array()) {
    parent::__construct($View);

    echo "test";die;
}

并将助手包含在我的助手列表中,然后打开一个不包含来自该助手的任何方法调用的页面,毕竟我看到了test 回显。但是我需要回应的是,只有在有方法调用时,类似于组件的启动,而不是初始化。

谢谢

【问题讨论】:

  • @burzum,nop,构造函数类似于初始化而不是启动,请参阅更新的问题。谢谢

标签: cakephp


【解决方案1】:

Controller::startup() 不像您描述的那样工作,startup() 无论您是否调用组件的方法都会被调用,因此辅助构造函数 与此类似。

无论如何,如果您需要在特定方法调用之前执行某些操作,但又不想在方法本身中实现它,那么请实现您的方法 protected 并使用魔术 __call 处理程序来执行您需要执行的任何操作事先并调用实际的方法。

类似

public function __call($method, $params) {
    switch($method) {
        case 'foo':
            // do something special before _foo()
            break;

        case 'bar':
            // do something special before _bar()
            break;

        // ...

        default:
            parent::__call($method, $params);
            return;
    }

    return call_user_func_array(array($this, '_' . $method), $params);
}

protected function _foo($foo, $bar) {
    // ...
}

protected function _bar($bar, $foo) {
    // ...
}

请参阅 http://php.net/manual/en/language.oop5.overloading.php 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多