【问题标题】:CakePHP 2.3.0 Form Validation errors not showing up- form fields in different modelsCakePHP 2.3.0 表单验证错误未在不同模型中显示更新表单字段
【发布时间】:2013-10-11 10:05:37
【问题描述】:

我试图从模型中获取错误以显示在表单提交中。我不会将此数据保存在数据库的任何位置,因此不使用 save 方法。问题是我无法看到 Model AnonymousRider 中设置的验证错误。代码如下 - ctp文件

<?php
    echo $this -> Form -> create(null, array('action' => 'confirmBooking'));

    echo $this -> Form -> input('Name', array('type' => 'text', 'id' => 'name', 'placeholder' => 'Name'));
    echo $this -> Form -> input('AnonymousRider.email', array( 'id' => 'email', 'placeholder' => 'Email'));
    echo $this -> Form -> input('AnonymousRider.phone_number', array( 'type' => 'tel', 'id' => 'number', 'placeholder' => 'Mobile Number'));
    echo $this -> Form -> input('address', array('type' => 'textarea', 'id' => 'pickup-point', 'placeholder' => 'pickup address and landmark details', 'required' => 'true'));
    echo $this -> Form -> input('tnc', array('type' => 'checkbox', 'id' => 'tnc', 'required' => 'true'));

    echo $this->Html->link('Terms and conditions', '/pages/home', array('class' => 'button', 'target' => '_blank'));
    $options = array('label' => 'Book Now', 'class' => 'btn btn-success .btn-large');
    echo $this -> Form -> end($options);
    ?>

以下是模型-

var $name = 'AnonymousRider';
public $validate = array
    (
        'phone_number' => array('rule' => array('phone', null, 'us'), 'message' => 'valid phone number required'), 
        'email' => array('rule' => 'email', 'message' => 'valid phone number required'), 
    );

}?>

我可以看到模型规则正在围绕 HTML 生成所需的内容。见 HTML-

<form action="/91/itinerary_requests/confirmBooking" id="ItineraryRequestConfirmBookingForm" method="post" accept-charset="utf-8">
<div style="display:none;">
    <input type="hidden" name="_method" value="POST">
</div>
<div class="input text">
    <label for="name">Name</label>
    <input name="data[ItineraryRequest][Name]" id="name" placeholder="Name" type="text">
</div>
<div class="input email required">
    <label for="email">Email</label>
    <input name="data[AnonymousRider][email]" id="email" placeholder="Email" maxlength="256" type="email" required="required">
</div>
<div class="input tel required">
    <label for="number">Phone Number</label>
    <input name="data[AnonymousRider][phone_number]" id="number" placeholder="Mobile Number" type="tel" required="required">
</div>
<div class="input textarea">
    <label for="pickup-point">Address</label>       <textarea name="data[ItineraryRequest][address]" id="pickup-point" placeholder="pickup address and landmark details" required="required" cols="30" rows="6"></textarea>

跨国公司 条款和条件

【问题讨论】:

    标签: validation cakephp formhelper


    【解决方案1】:

    您可以在控制器中验证您的数据

    manual

    你所要做的就是:

    if ($this->ModelName->validates()) {
        // it validated logic
    } else {
        // didn't validate logic
        $errors = $this->ModelName->validationErrors;
    }
    

    【讨论】:

    • 谢谢你的工作。我还看到电子邮件验证是在客户端完成的,抛出默认错误 - “请输入电子邮件地址”。如果我们输入非数字,我试图对指示客户端错误的电话号码进行同样的操作。关于那个有任何线索吗?这是生成的 HTML
    • 客户端验证与 cake 无关,是 htmml5 功能。 Cake 只需设置输入类型,其余的由您的浏览器完成。我想没有客户端电话验证
    • 一些研究让我发现-“由于电话号码格式的固有差异,tel 输入类型不符合任何特定模式。相反,浏览器将其视为常规的单行文本输入字段,其结果是浏览器没有尝试验证该字段。使用这种类型的字段的主要优点是优化移动设备上的键盘“htmlgoodies.com/html5/tutorials/…
    • 我用 cakephp1.2 设置 $this->set('errors',$this->ModelName->validationErrors);但视图中没有显示错误。
    猜你喜欢
    • 1970-01-01
    • 2021-01-01
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    相关资源
    最近更新 更多