Validation 在CakePHP中设置运行时验证规则
我现在的问题是模型有一组验证规则,如下所示:Validation 在CakePHP中设置运行时验证规则,validation,cakephp,Validation,Cakephp,我现在的问题是模型有一组验证规则,如下所示: var $validate = array( 'title' => array( 'rule' => 'notEmpty' ), 'uri' => array( 'slugged' => array( 'rule' => '/^[a-z0-9-_]+$/i', 'message' => 'This field s
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'
)
);
问题是,在另一个只有一个关系的模型中,其控制器也将数据插入其中。我不想要求该页面的标题、uri和布局。我该怎么做
我有一个Post模型,我从那里设置页面值
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][layout]
在帖子控制器中使用该方法的默认视图。页面使用静态页面,在创建页面时需要静态页面,而不是在创建帖子时 您正在对数据进行预处理,然后再进行验证,因此您将从验证中获得一些控制权。当您(在代码中)决定是否需要人工填充某些字段时,您将使验证的这些部分变得多余,并且应该删除它们。如果您在php中有多个验证,您最终会感到困惑
在哪里做这件事,或者如何做得更干净?嗯,
beforeValidate
可能是执行此操作的“正确”位置,但我会在最适合应用程序逻辑的地方执行此操作。函数应该放在优雅之前。这有点奇怪,因为验证规则应该“保护”进入数据库的内容。如果可以接受空标题,则规则不应为notEmpty
。请澄清。你的意思是你只想更新其中一个字段,而不需要在过程中触摸title
等吗?实际上,我应该从另一个模型获取信息,我将从Post['title']获取页面['title'],等等。我应该把它们放在控制器中,并在saveAll进程之前在那里设置值吗?我已经这样做了,但我在想是否还有其他方法。我可以这样设置布局$this->data['Page']['layout']='blah_blah';但是有没有更干净的方法呢?