0

我正在运行 CakePHP 2.4.1 和 PHP 5.5.3。

在这里阅读了有关如何创建/写入/访问全局变量的信息,但它对我不起作用。我正在做这样的事情:

class SploopsController extends AppController {
    public $crung;

    public function process() {
        $this->crung = 'zax';
    }

    public function download() {
        $this->response->body($this->crung);
        $this->response->type('text/plain');
        $this->response->download('results.txt');
        return $this->response;
    }
}

但是下载的文件results.txt是空白的,即是空$this->crung的。(如果我$this->crung用一个简单的字符串替换'Granjo'它可以按预期工作。)有没有人知道出了什么问题?

此外, Configure::write 和 Configure::read 也不适合我(如果我在 Controller 的函数中调用它们)。

这是上下文:我在 process() 中创建了一个包含查询结果的数组,并将它们显示在 process.ctp 中,我想要一个按钮,可以将这些结果以更文本友好的格式下载到文本文件中。所以我想创建一个全局数组,我可以在 process() 中修改,然后在 download() 中访问。

谢谢!

4

2 回答 2

1

只需procees在设置前调用

public function download() {
    $this->process();
    $this->response->body($this->crung);
    $this->response->type('text/plain');
    $this->response->download('results.txt');
    return $this->response;
}

编辑

public function process() {
    if (!empty($this->request->data)) { // assuming you're processing the user entered data by means of post
        $this->Session->write('crung', 'zax');
        $this->Session->write('data', $this->request->data);
    }
}

public function download() {
    $this->crung = $this->Session->read('crung');
    $data = $this->Session->read('data'); // you can process the data in the way you want.

    $this->response->body($this->crung);
    $this->response->type('text/plain');
    $this->response->download('results.txt');
    return $this->response;
}
于 2013-11-07T05:03:38.173 回答
0

您需要process()在使用前调用函数$this->crung,如下所示

public function process() {
    $this->crung = 'zax';
}

public function download() {
    $this->process();
    $this->response->body($this->crung);
    $this->response->type('text/plain');
    $this->response->download('results.txt');
    return $this->response;
}

否则,您可以使用beforeFilter()将在您的函数之前调用的download()函数。这在您需要分配值时很有用

public function beforeFilter()
{
     $this->crung = 'zax';
}
于 2013-11-07T04:59:52.417 回答