如何在Cakephp中没有模型的情况下执行表单验证?

17 cakephp

我需要进行一些验证.我在应用程序中没有该模型.

有没有人知道如何在没有模型的情况下进行验证?你能用小样本或陈述给我看吗?

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)


Rea*_*lar 9

您可以在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中进行了测试