我现在的问题是,模型有一组验证规则,如下所示:
var $validate = array(
'title' => array(
'rule' => 'notEmpty'
),
'uri' => array(
'slugged' => array(
'rule' => '/^[a-z0-9-_]+$/i',
'message' => 'This field should only contain characters, numbers, dashes and underscores'
),
'uniqueUrl' => array(
'rule' => array('uniqueUrl'),
'message' => 'A page has already acquired this url'
)
),
'meta_keywords' => array(
'rule' => 'notEmpty'
),
'meta_description' => array(
'rule' => 'notEmpty'
),
'layout' => array(
'rule' => 'notEmpty'
)
);
问题在于,在另一个具有hasOne关系的模型中,其控制器也会将数据插入其中。我想不要求该页面的标题,uri和布局。我该怎么做?
我有一个Post Model,我从那里设置了Page值。
Array
(
[Post] => Array
(
[title] => data[Post][title]
[body] =>
Post Body
)
[Category] => Array
(
[Category] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
)
[Page] => Array
(
[meta_keywords] => data[Page][meta_keywords]
[meta_description] => data[Page][meta_description]
)
)
我从控制器执行此操作以设置页面模型的信息
$this->data['Page']['title'] = $this->data['Post']['title'];
它变成了这样:
Array
(
[Post] => Array
(
[title] => data[Post][title]
[body] =>
Post Body
)
[Category] => Array
(
[Category] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
)
[Page] => Array
(
[meta_keywords] => data[Page][meta_keywords]
[meta_description] => data[Page][meta_description]
[title] => data[Post][title]
)
)
我的问题是保存时我不需要Page
字段。 Post belongsTo Page
。
保存帖子时我不需要[Page][layout]
作为帖子使用Post Controller中方法的默认视图。页面使用静态页面并在创建页面时需要它们,而不是在创建帖子时。
答案 0 :(得分:0)
您在进行验证之前对数据进行了预处理,因此您可以从验证中获取一些控制权。由于您似乎(在代码中)决定是否需要人工填充某些字段,因此您要将验证的那些部分呈现为冗余,您应该删除它们。如果你在php中有多个验证,那么你最终会感到困惑。
在哪里这样做或如何更干净地做到这一点?好beforeValidate
可能是“正确”的地方,但我会在最符合你的应用程序逻辑的地方做到这一点。功能应该优雅。