【发布时间】: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