【问题标题】:Cakephp data validation "notEmpty" "required"Cakephp 数据验证 "notEmpty" "required"
【发布时间】:2013-02-05 11:41:15
【问题描述】:

我是蛋糕的新手,完成了博客教程,现在我正在尝试一些简单的开始。 但是我有一些我无法理解的东西。 在模型 PersonalInformation 上,我得到了表字段的数据验证:

这是我的带有 $validate 数组的模型:

class PersonalInformation extends AppModel {

/**
 * Validation rules
 * @var $validate
 */
public $validate = array(
    "first_name" => array(
        "name"      => array(
            "rule"      => "validName",
            "message"   => 'Only alpha characters and "." (dots)',
        ),
    ),
    "last_name"  => array(
        "name"      => array(
            "rule"      => "validName",
            "message"   => 'Only alpha characters and "." (dots)',
        ),
    ),
    "birth_date" => array(
        "date"      => array(
            "rule"      => "date",
            "message"   => "Enter a valid date",
        ),
    ),
    "nickname"  => array(
        "alphanumeric"  => array(
            "rule"      => "alphaNumeric",
            "message"   => "Only alpha-numeric characters",
        ),
    ),
    "gender"     => array(
        "notEmpty"  => array(
            "rule"          => "notEmpty",
            "message"       => "Can't be empty",
        ),
    ),
);

} // end class

这是我的桌子:

CREATE TABLE `personal_informations`
(
`id` INT NOT NULL UNIQUE AUTO_INCREMENT,
`first_name` VARCHAR(45),
`last_name` VARCHAR(45),
`birth_date` DATE,
`nickname` VARCHAR(45),
`is_company` TINYINT DEFAULT 0 NOT NULL,
`picture_url` VARCHAR(255),
`gender` ENUM('m','f') NOT NULL,
`notes` TEXT,
`created` DATETIME,
`modified` DATETIME,
PRIMARY KEY (`id`)
) ENGINE=InnoDB CHARACTER SET=utf8;

CREATE INDEX `id_idx` ON personal_informations(id);

这是视图:

<!-- /PersonalInformations/add -->

<div class="">
<h2>Create a personal information</h2>
    <?php
    echo $this->Form->create();

    echo $this->Form->input( "PersonalInformation.first_name" );
    echo $this->Form->input( "PersonalInformation.last_name" );
    echo $this->Form->input( 
        "PersonalInformation.birth_date", 
        array( 
            "separator" => " - ", 
            "minYear" => date('Y') - 90,
            "maxYear" => date('Y')
    )
    );
    echo $this->Form->input( "PersonalInformation.nickname" );
    echo $this->Form->input( "PersonalInformation.is_company", array( "type" =>     "checkbox" ));
    echo $this->Form->input( "PersonalInformation.piture_url", array( "type" => "file"     ));
    echo $this->Form->radio( "PersonalInformation.gender", array( "m" => __("Male"), "f"     => __("Female")), array( "hiddenField" => false ));
    echo $this->Form->textarea( "PersonalInformation.notes" );

    echo $this->Form->end( "Done" );
    ?>
</div>

所以问题是由于某种原因“昵称”是必需的,我的意思是,当我单击“昵称”为空的提交按钮时,它显示“仅字母数字字符”。 而对于“性别”,当没有选择任何内容时,它不会显示任何内容。

如果我还有什么需要发布的,请告诉我。

【问题讨论】:

  • “allowEmpty”有效。我之前尝试过,问题是它不在昵称数组中,我刚刚注意到在 ADmad 帖子上谢谢所有(不幸的是我不能投票)

标签: php mysql validation cakephp


【解决方案1】:

给你的昵称

'nickname' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'Nick name is required.'
            )
        )

性别:

在视图中

echo $this->Form->input('PersonalInformation.gender',array(
          'type'=>'select','empty' => '---- Select----',
          'class'=>'select',
          'options'=>$option_array
          ))

在模型验证数组中:

'gender' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'Can\'t be empty.'
            )
        )

【讨论】:

  • 关于性别我会尽快测试,但是关于昵称,我不希望它是必需的,但由于某种原因,当我点击提交时,它看起来就像是它,因为它不允许我没有提交填写输入。
  • 昵称需要哪些功能。
  • 请注意,根据文档,“notEmpty”自 2.7 版起已弃用。替换它的函数是“notBlank”。没有解释第一个有什么问题。
【解决方案2】:

为昵称规则添加'allowEmpty' =&gt; true。

 "nickname"  => array(
        "alphanumeric"  => array(
            "allowEmpty"=> true,
            "rule"      => "alphaNumeric",
            "message"   => "Only alpha-numeric characters",
        ),
    ),

【讨论】:

    【解决方案3】:

    昵称,你试过用required =&gt; false吗? 你可以阅读更多关于它in the documentation.

    "nickname"  => array(
        "alphanumeric"  => array(
            "rule"      => "alphaNumeric",
            "required" => false,
            "message"   => "Only alpha-numeric characters",
        ),
    ),
    

    【讨论】:

    • 其实,“必需”并不是他想要的。从您链接到的文档中:“required 和 allowEmpty 之间的区别可能令人困惑。'required' => true 意味着如果 $this->data 中不存在此字段的键,则您无法保存模型(执行检查with isset); 而 'allowEmpty' => false 确保当前字段值非空,如上所述。"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2012-07-26
    • 2015-02-10
    相关资源
    最近更新 更多