【问题标题】:simple cakephp problem简单的cakephp问题
【发布时间】:2011-08-25 22:04:39
【问题描述】:

我知道这是一件非常简单的事情,我真的应该知道,但我正在尝试学习 cakephp,而之前没有做过很多 php。有人告诉我这是一个愚蠢的想法,但我这样做是为了好玩,所以我正在这样做。

我想将一个数组从一个控制器动作传递到另一个控制器动作,然后将它传递给视图。我有:

sponges_controller.php

$info = $this->data;
$this->redirect(array('controller'=>'baths', 'action'=>'dashboard', $info));

baths_controller.php

function dashboard($info) {
    $this->set('info', $info);
}

然后

<?php echo debug($info); ?> 

在仪表板的视图中。

我尝试了各种方法,但无法成功。它所做的只是打印出 Array()

请帮帮我! :) 朱莉娅

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    据我所知,您不能以这种方式将数据从一个控制器传递到另一个控制器,最多可以将字符串连接到操作,例如用于查看或编辑的 ID。

    如果你想传递信息,你可以尝试通过以下方式在 SESSION 变量中设置它:

    $this->Session->write('Info', $info);
    

    您可以在其他控制器中检查它:

    $this->Session->read('Info');
    

    【讨论】:

      【解决方案2】:

      看起来 cake 不允许您将数组传递给控制器​​动作。我设置了一个简单的例子,我得到了一个“数组到字符串转换错误”。您不只是将数据发布到浴室/仪表板是否有特定原因?我可以为您的问题想出一个解决方法,但它非常混乱。

      8vius 的上述解决方案肯定会奏效。 这是另一种方式,但使用会话可能会更好

      $str = http_build_query($info);
      $this->redirect('/baths/dashboard?'.$str);
      

      然后在您的浴室/仪表板操作中,您将可以使用 php $_GET 数组访问您的数据。 因此,如果您最初拥有 this-&gt;data['name'],则可以使用 $_GET['name'] 访问它

      【讨论】:

      • 这适用于字符串你也可以这样做 $this->redirect(array('controller' => 'controller', 'action' => 'action'.$info)) 这是一个更正确的方式,因为如果它发生变化,您不必更正您的操作路径
      • @8vius 好点。我经常使用 cakephp,但我想我从来没有充分利用它所能做的一切。 (例如,经常使用 Model->query() 并编写自己的查询而不是使用 Model->find() )
      【解决方案3】:

      我不确定在不同控制器中传递数据,但在同一个控制器中,我们可以像函数调用一样通过编写这样的代码来完成。

      $this->function_name($info);
      

      这将完全按预期工作。我没有尝试过在不同的控制器函数中传递这种类型的数据。

      【讨论】:

      • 这行得通!要传递给不同的控制器,您只需添加控制器名称,即: $this->Controller->function_name($info);非常感谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 2011-10-31
      • 2011-01-29
      • 2018-03-07
      • 2011-10-30
      • 2013-02-17
      相关资源
      最近更新 更多