【问题标题】:Pass Entity object as parameter to controller function in CakePHP 3.x将实体对象作为参数传递给 CakePHP 3.x 中的控制器函数
【发布时间】:2016-06-03 14:42:11
【问题描述】:

我有一个 CakePHP 3.1 项目,我正在寻找一种方法,使用 FormHelper postLink 将实体对象和数组作为参数传递给控制器​​。

我已经尝试过的:

echo $this->Form->postLink(
                __('Unlink'),
                ['action' => 'unlink', $entity, $array],
                ['confirm' => __('Are you sure to unlink {0}?', $array['name'])]);  

我的控制器:

public function unlink($entity,$array)
{
    $theTable = TableRegistry::get('tableName');
    $theTable->Model->unlink($entity, $array);
    return $this->redirect($this->referer());
}

这显示了一个众所周知的错误:

rawurlencode() 期望参数 1 是字符串

但是我没有找到任何适合我需要的帖子,我想这是因为我需要传递一个对象而不是基本类型。

感谢任何帮助或更好的选择。

【问题讨论】:

  • 也许你可以发送实体的 id 并通过$this->EntityName->get($id);在你的控制器中获取它
  • @B.Kevin 这意味着当我已经拥有数据时,还要对数据库进行两次查询。我已经想到了,但我认为这不是最好的选择,但感谢您的建议。
  • 除非您需要每秒处理 10.000 个取消链接请求,否则这两个实体查询真的没什么可担心的。更不用说在技术上不需要时传递序列化对象,通常听起来不是一个好主意。
  • 另外,当控制器中的 unlink() 方法甚至不检查 HTTP 动词时,为什么还要使用 postLink()?
  • @ndm 好的,谢谢,我总是有点担心性能......如果是这样的话,只传递实体的 id 和将被取消链接的元素就足够了。 ..我只是觉得查询我已经拥有的信息很奇怪。也许我不明白get() 做了什么......

标签: php cakephp model-view-controller cakephp-3.0


【解决方案1】:

尝试仅将实体 id 作为参数(而不是实体)传递并在取消链接操作中执行该工作:

echo $this->Form->postLink(
            __('Unlink'),
            ['action' => 'unlink', $entity->id, $array],
            ['confirm' => __('Are you sure to unlink {0}?', $array['name'])]);

内部取消链接:

public function unlink($id = null ,$array = [])
{
    if (is_null($id)) {
        // an error flash message can be set here
        return $this->redirect($this->referer());
    }       
    $theTable = TableRegistry::get('tableName');
    $theEntity = $theTable->get($id);
    $theTable->unlink($theEntity, $array);
    return $this->redirect($this->referer());       
}

【讨论】:

    猜你喜欢
    • 2017-03-15
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多