ink*_*dmn 35
老实说,我只是为验证创建了一个模型.您可以通过添加创建不使用表的模型
var $useTable = false;
Run Code Online (Sandbox Code Playgroud)
然后创建一个验证数组,其中包含要验证的每个字段的规则:
var $validate = array('login' => 'alphaNumeric','email' => 'email','born' => 'date');
Run Code Online (Sandbox Code Playgroud)
然后,在您的控制器中,执行以下操作:
$this->MyModel->set($this->data);
if($this->MyModel->validates()){
// do stuff with valid data
}
Run Code Online (Sandbox Code Playgroud)
如果你真的,真的不能使用模型,那么你必须简单地循环$this->data控制器动作中的每个值并根据正则表达式验证它或使用这些Validation::[rule]()东西,如:
if(Validation::email($someThingThatMightBeAnEmailAddress)){
// do stuff with valid email address.
}
Run Code Online (Sandbox Code Playgroud)
您可以在CakePHP中执行表单数据的验证,而无需创建model.php文件.有很多次我需要这样做,并且存储model.php文件,除了验证之外什么都不做,这是对模型设计模式的不良使用.
CakePHP的另一个问题是,有时验证规则在多个模型中很常见.将验证移出模型会很好,就像行为对自己的子文件夹一样.这样我们可以重复使用它们或在没有模型的情况下使用它们.
验证的另一个问题是它依赖于模型别名.如果您有一个名为"电子邮件"的模型而没有表格来执行验证,那么发布的表单也必须使用"电子邮件".如果表单使用与控制器不同的别名,则必须设置操作.许多额外的步骤只是为了进行验证.如果表单使用不同的模型,则无法再次使用该模型.
所以这是我的替代方法.
在控制器的操作中,它接收已发布的表单数据.您可以创建默认的CakePHP模型,添加一些验证规则,然后使用该模型进行验证.
示例动作可能如下所示;
function edit()
{
$model = ClassRegistry::init(array('class'=>'Email','table'=>false,'type'=>'Model'));
if(!empty($this->data))
{
$model->validate = array(
'subject'=>array(
'rule'=>'notEmpty',
'required'=>true
),
'message'=>array(
'rule'=>'notEmpty',
'required'=>true
)
);
if($model->save($this->data))
{
// validation was successful, but no data was actually saved
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里的关键是CakePHP创建一个自动模型.
$model = ClassRegistry::init(array('class'=>'Email','table'=>false,'type'=>'Model'));
Run Code Online (Sandbox Code Playgroud)
以上尝试在应用程序模型文件夹中通过电子邮件查找模型.如果没有找到,CakePHP将自动为该类创建内存模型.由于我们将'table'的值设置为false,因此这应该告诉CakePHP该模型不使用表.
只要应用程序模型文件夹中确实没有email.php文件,这就可以正常工作.一旦在内存中创建此模型.它可以从内置的Form帮助中访问.这意味着验证错误将正确传递给视图.
这是一个示例视图文件.
<?php echo $this->Form->create('Email',array('action'=>array('controller'=>'mycontroller','action'=>'edit'))); ?>
<?php echo $this->Form->input('subject'); ?>
<?php echo $this->Form->input('message',array('type'=>'textarea')); ?>
<?php echo $this->Form->submit(); ?>
Run Code Online (Sandbox Code Playgroud)
该视图现在将使用Form帮助程序从Email模型呈现验证错误.这是因为CakePHP类注册表已在表单助手将访问的内存中保存了EMail自动模型的副本.
如果要使用自定义验证规则,则必须将回调方法放在app_model.php文件中.
这些方法在CakePHP 1.3中进行了测试
| 归档时间: |
|
| 查看次数: |
13376 次 |
| 最近记录: |