来自Component的Access Controller变量 - CakePHP

时间:2014-05-15 21:16:48

标签: php cakephp cakephp-2.3

我正在使用CakePHP的插件 - AjaxMultiUpload(一个很好的插件:-) - 但是我有一个关于如何更改/访问Controller中定义的变量的问题。

我之前使用过此插件并喜欢它。但我试图根据我将Component附加到哪个控制器来限制允许上传哪些文件类型。

在插件中有一个Controller - UploadsController.php。在这个类中,有一个公共变量:

// list of valid extensions, ex. array("jpeg", "xml", "bmp")
public $allowedExtensions = array();

如果我将其更改为:

public $allowedExtensions = array('mp3');

当我尝试上传.jpg文件时,会发出错误消息(正如人们所希望的那样: - )。

在我的控制器(Tracks)中,我附加了AjaxMultiUpload插件。有用。在我的Tracks控制器的beforeFilter()方法中,我放置了以下行:

$this->Upload->allowedExtensions = array('mp3');

这没有效果。 (顺便说一句,没有任何警告告诉我,我试图访问不存在的东西)。

我不想通过在插件的控制器中对其进行硬编码来更改数组allowedExtensions的内容。这有两个原因:1)插件的可更新性和2)我想根据插件中的哪些控制器(轨道,图像等)更改限制(例如音频文件类型与图像文件类型)附在。

我不明白的是Component(附加到Tracks控制器)和作为插件一部分的UploadsController之间的关系。什么实例化作为插件一部分的UploadsController?这会自动发生吗?

有人可以帮忙吗?

谢谢, 肯

3 个答案:

答案 0 :(得分:0)

从控制器访问组件与Cake中的模型相同。我创建了一个Test组件,并将其包含在主应用程序的控制器和插件中的控制器中:

应用/控制器/组件/ test.php的

class TestComponent extends Object {
    public $allowedExtensions = array(); // put your defaults in the component
}

应用/控制器/ my_controller.php

class MyController extends AppController {
    // ... vars
    var $components = array('Test', /* ...others */);
    var $layout = '';

    public function test() {
        $this->render(false);

        // get current values from component
        debug($this->Test->allowedExtensions);

        // add a JPG
        $this->Test->allowedExtensions[] = 'jpg';
        debug($this->Test->allowedExtensions);

        // add a MP3
        $this->Test->allowedExtensions[] = 'mp3';
        debug($this->Test->allowedExtensions);
    }
}

此测试的输出是:

  

app \ controllers \ my_controller.php(第n行)数组()

     

app \ controllers \ my_controller.php(第n行)数组(       [0] => jpg)

     

app \ controllers \ my_controller.php(第n行)数组(       [0] => JPG       [1] => mp3)

因此,您可以从任何使用它的控制器中看到Test组件的公共属性。

使用完全相同的方法来包含主项目中的组件(插件特定模型,组件等需要以插件的名称为前缀)产生相同的结果,实际上您可以从中控制该组件属性一个插件或任何一个控制器,它仍然在它自己的组件中有你的默认值。

答案 1 :(得分:0)

在控制器中:

$this->myVariable

在组件中:

$this->getController()->myVariable

答案 2 :(得分:0)

您可以在CakePhp 3.x中获得组件的控制器,如下所示:

$ objController = $ this-> _ registry-> getController();