在恕我直言中应该是微不足道的东西。
我的网络应用AppController
中有一个公共功能 - 称之为getDbConfig()
我有一个插件,我想引用在系统范围的AppController中定义的getDbConfig()函数。
显然$this->getDbConfig()
不起作用 - 因为$ this指的是本地上下文 - 但对于我的生活,我无法弄清楚如何在插件中指定系统AppController
中公共函数的路径AppControllers
答案 0 :(得分:1)
没有意义恕我直言。插件可以在您的应用程序之外生活。理想情况下,您可以将插件公开,以便其他开发人员可以在其应用程序中使用它。
如果你引用了你(并且只有你)在AppControll中拥有的功能,你的插件就不再是一个插件。
我认为这是您应该创建组件的典型情况。将getDbConfig()
放在Component中,以便您可以从Plugin和AppController中调用该组件
答案 1 :(得分:1)
但是对于我的生活,我无法弄清楚如何在插件AppControllers中的系统AppController中指定公共函数的路径
了解php OOP namespace basics。您需要导入和别名该类。并从您的应用程序AppController继承。这将使插件依赖于App
命名空间可用,但是,至少我从未见过使用另一个命名空间的CakePHP应用程序。如果它是另一个,开发人员仍然可以分叉并使用该分叉并对其进行更改。
或者将相关代码作为组件或实用程序类,并检查插件AppController是否存在该类,然后实例化实用程序lib或加载组件。
答案 2 :(得分:0)
您应该将该函数作为配置参数传递给您的插件/组件,或者将结果从getDbConfig()传递给我(我认为它不会发生太大的变化)。
所以:
class MyComponent extends Component
{
private $dbconfig = null;
public function initialize (array $config)
{
parent::initialize ($config);
if (isset ($config['dbconfig']))
{
$this->dbconfig = $config['dbconfig'];
}
}
}
然后,在你的控制器中:
class MyController extends AppController
{
public function initialize()
{
parent::initialize();
$this->loadComponent ('My', ['dbconfig' => $this->getDbConfig()]);
}
}
如果你真的必须引用一个函数并调用它,请使用variable functions。