CakePHP访问参数从另一个控制器重定向

时间:2017-03-27 02:35:40

标签: redirect cakephp parameters

使用QueryController我要求$ querySCP-> text和$ querySD-> text

我将这些参数传递给具有$ this-> request-> session ...的

的ResultController

我尝试在view.ctp中访问$ querySCP和$ querySD。

我有以下代码:

控制器查询:

public function add()
{
$querySCP = $this->Query->newEntity();
$querySD = $this->Query->newEntity();
if ($this->request->is('post')) {
    $this->request->session()->write(
        'my-stuff', 
        $this->request->data);
    $this->redirect('/result/view');    
}
}

控制器结果:

public function view()
    {
        $myStuff = $this->request->session()->read('my-stuff');
        if (!$myStuff) {
            $this->Flash->error(__('Unable.'));
            return $this->redirect('/start/point');
        }
        $this->set($myStuff); //here i tried to pass parameters to the view.ctp
    }

查看view.ctp:

<?php $myStuff->querySCP->text?>
<?php $myStuff->querySD->text?>

我如何访问这些参数?它们是$ myStuff的方法吗? 感谢。

2 个答案:

答案 0 :(得分:1)

我不会详细介绍如何使用实体,但是您尝试做的事情的基础知识将会是这样的。

有关如何修补实体等的更多信息,请查看文档:{​​{3}}

控制器1:

public function add()
{
    $someArray = ['a' => 'b', 'c' => 'd'];

    // write the array to a session variable
    $this->request->session()->write(
        'my-stuff', 
        $someArray);

    // redirect by using array will respect CakePHP routes defined in `routes.php`
    $this->redirect(['controller' => 'Controller2', 'action' => 'view']);
}

控制器2:

public function view()
{
    // retrieve our array from the session store
    $myStuff = $this->request->session()->read('my-stuff');

    // redirect if session variable is not set or isn’t an array
    if (!$myStuff || !is_array(myStuff)) {
        $this->Flash->error(__('Error'));
        return $this->redirect(['controller' => 'Controller1', 'action' => 'add']);
    }

    // data = the variable name in the View later on
    $this->set('data', $myStuff);
}

查看view.ctp:

<?= $data['a'] ?> /
<?= $data['c'] ?>

将输出:

b / d

答案 1 :(得分:0)

老实说,你真的知道自己在做什么吗?代码并没有让我这么想。

  1. 您将HTTP POST数据写入会话,但希望将实体返回到另一个控制器中。为什么你认为这会起作用?如果您希望实体存在,则需要将实体传递给会话。顺便说一句:自{CakePHP 3.4。
  2. 以来,$this->request->data已被弃用
  3. 按照您尝试的方式设置实体会产生警告Illegal offset type
  4. 您尝试显示输入而不在视图中回显它(缺少回声)
  5. 您尝试传递数据然后访问$ myStuff的方式让我觉得您不知道对象和数组之间的区别。
  6. 强烈建议您一般在php上做一些入门教程,并从一开始就做the CakePHP blog tutorial,因为它会教你如何使用框架。

    至少阅读以下主题:

    我不会为你咀嚼代码,但这是你需要做的事情:将两个实体放在一个数组中,将数组传递给会话,从会话中读取该数组,将其设置为视图。但你首先要做的是了解如何做你想做的事情。阅读链接的文档。