将额外数据传递给实体

时间:2015-04-06 08:19:05

标签: php cakephp-3.0

我目前正在开发媒体行为,以便将媒体附加到模型上。 我想在Media模型中处理文件(上传);这样,每次上传文件时,它都直接与文件相关联。

在cakephp2.0中,我直接在数据数组中传入了一个额外的字段'文件'从哪里我可以提取文件并进行处理。 我在这里尝试做我的行为:

$entity = $this->_table->Medias->newEntity(array(
    'path' => WWW_ROOT . $config['path'],
    'file' => $data[$field],
    'field' => $field
));

file键与表格中的任何字段无关。但它没有通过,我无法在我的Medias模型中的beforeSave()生命周期回调中恢复它。

如何以正确的方式将其传递给我的模型?

1 个答案:

答案 0 :(得分:1)

默认情况下,实体受到群发分配攻击的保护。这意味着当从数组中创建实体时,您需要明确告诉实体或newEntity()哪些字段可以访问。

请阅读有关质量分配的文档:

http://book.cakephp.org/3.0/en/orm/entities.html#mass-assignment

您还可以告诉newEntitypatchEntity方法可访问字段列表应该是什么。请阅读有关如何使用这些方法的fieldListaccessibleFields选项的文档:

http://book.cakephp.org/3.0/en/orm/saving-data.html#converting-request-data-into-entities

最后,某些数据可能无法到达实体的另一个原因是验证。确保您的字段正在通过您对它们的验证,就好像它们未通过任何规则一样,它们将不会被复制到实体。