- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在一个页面上有两个表单:登录表单和注册表单。当我提交注册表单时,它会验证以下两项:登录和注册中的表单字段。如果两个表单具有相同的模型(用户模型),我该如何处理
登记表
<?php echo $this->Form->create('User', array('url' => array('controller' => 'users', 'action' => 'add'))); ?>
<?php echo $this->Form->input('username', array('label' => false, 'div' => false, 'class' => 'reg_input'));?>
<?php echo $this->Form->input('email', array('label' => false, 'div' => false, 'class' => 'reg_input'));?>
<?php echo $this->Form->input('password', array('label' => false, 'div' => false, 'class' => 'reg_input'));?>
<?php echo $this->Form->input('confirm_password', array('type' => 'password', 'label' => false, 'div' => false, 'class' => 'reg_input'));?>
<?php echo $this->Form->submit(__('Submit', true), array ('class' => 'reg_button', 'div' => false));
echo $this->Form->end();?>
登录表单如下
<?php echo $this->Form->create('User', array('controller' => 'users', 'action' => 'login'))?>
<?php echo $this->Form->input('User.username',array('label'=>false,'div'=>false, 'class' => 'reg_input'));?>
<?php echo $this->Form->input('User.password',array('label'=>false,'div'=>false, 'class' => 'reg_input'));?>
<?php echo $this->Form->submit(__('Log in', true), array ('class' => 'reg_button', 'div' => false)); ?>
<?php echo $this->Form->end();?>
当我提交注册表单时,它会验证两个表单,我只想验证注册表单。
我该如何处理?
最佳答案
我已经为 different question 提出了一个“解决方案”(我发现这种方法很脏,但它有效)。 (与此非常相似)。不过,另一个问题与元素和 View 有关。我将在这里发布整个解决方案,看看它是否对某人有帮助(尽管我宁愿其他人采用不同的方法)。
所以,首先:更改两个表单的创建名称。
//for the registration
<?php echo $this->Form->create('Registration',
array('url' => array('controller' => 'users', 'action' => 'add'))); ?>
//for the login
<?php echo $this->Form->create('Login',
array('controller' => 'users', 'action' => 'login'))?>
表单应该工作、查看和发布相同的操作,因此不会造成任何损害。
第二步:我没有您的操作代码,因此我将解释一般需要做什么
public function login() {
if ($this->request->is('post')) {
//we need to change the request->data indexes to make everything work
if (isset($this->request->data['Login'] /*that's the name we gave to the form*/)) {
$this->request->data['User'] = $this->request->data['Login'];
unset($this->request->data['Login']); //clean everything up so all work as it is working now
$this->set('formName', 'Login'); //we need to pass a reference to the view for validation display
} //if there's no 'Login' index, we can assume the request came the normal way
//your code that should work normally
}
}
注册也是如此(只需将“登录”更改为“注册”)。
现在,操作应该正常运行,因为它不知道我们更改了 View 上的表单名称(我们确保更改了操作中的索引)。 但是,如果存在验证错误, View 将在
中检查它们$this->validationErrors['Model_with_errors']
并且“Model_with_errors”(在本例中为“User”)不会显示在相应的表单中,因为我们更改了名称。所以我们还需要调整 View 。哦!例如,我假设这两种形式都位于名为 index.ctp
的 View 中,但如果它们位于单独的文件中(如果您使用的是元素或类似元素),我建议添加以下行所有文件的代码
//preferably in the first line of the view/element (index.ctp in this example)
if (!empty($this->validationErrors['User']) && isset($formName)) {
$this->validationErrors[$formName] = $this->validationErrors['User'];
}
这样,我们将用户的模型验证复制到假命名表单中,并且仅复制到该表单中。请注意,如果同一模型的该 View 中有第三个表单,并且使用典型的 $this->form->create('User')
,那么将显示该验证错误除非您更改第三个表单的名称,否则也有一个。
这样做应该可行,并且仅验证具有正确名称的表单。
我发现这是一种困惑的方法,因为它涉及 Controller View 的更改。我认为一切都应该由 Controller 完成, View 甚至不应该因验证问题而眨眼...问题在于 Controller.php
的 render
函数> 需要替换...可以在AppController
中完成,但是对于Cakephp的每次升级,您必须小心复制Controller.php的新渲染函数
到 AppController
中替换它的那个。不过,这种方法的优点是“功能”可用于每种表单,而不必担心更改 View 。
好吧,无论如何它都不是那么可维护的,所以如果只是针对这种情况,最好不要管它......如果有人对如何在 Controller 端处理这个问题感兴趣,请发表评论,我会发布它。
关于cakephp - 单页 cakephp 上具有相同型号名称的多个表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16669857/
在了解如何检测用户设备后:iOS - How to get device make and model? 我制作了一个快速测试应用程序以根据设备显示警报。我没有从这段代码中得到任何警告。我在这里错过了
我有一个名为 test.rb 的模型,当我在 Controller 中使用 @tests=Test.new 时,出现以下错误。有人可以解决这个问题吗? “Test:Module 的未定义方法‘新’”
我必须从不同的网络服务和我自己的数据库中获取数据,并在网站上显示之前组合这些数据。 执行此操作的最佳方法是什么?我更喜欢为 Web 服务和数据库编写单独的模型。如何将不同数据源的模型类组织到不同的文件
我必须从不同的网络服务和我自己的数据库中获取数据,并在网站上显示之前组合这些数据。 执行此操作的最佳方法是什么?我更喜欢为 Web 服务和数据库编写单独的模型。如何将不同数据源的模型类组织到不同的文件
我正在开发一种模糊搜索机制。我在数据库(mysql)(英文和俄文名称)中有汽车品牌/型号和城市 - 大约 1000 项。用户可以输入错误或翻译中的单词。现在我从 db 中检索所有这些单词,并将循环中的
问题 我在一家拥有大量现场员工的公司工作,他们都配发了 iPhone。但这些手机的型号各不相同,没有早于 iPhone 4 的。我需要一种快速的方法来确定哪个人拥有哪种型号的 iPhone,因为该数据
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: Determine device (iPhone, iPod Touch) with iPhone SDK H
我有我的应用程序的故障转储。我的应用程序失败,因为一些用户说“无效指令”试图执行我在那里的一些 SSSE 指令。 在 WinDBG 中,如何找出 CPU 型号,以便找出其指令集,并支持该指令集,或更新
这是我的想法(原谅 Django 格式): class VehicleMake(Model): name = CharField(max_length=50) class VehicleMod
我知道 before_filter 仅适用于 Rails 中的 Controller ,但我想要一个模型这样的东西:每当我的模型中的一个方法被调用时,我想运行一个方法来确定被调用的方法是否应该运行。从
我按以下方式编写代码 #define isiPhone6 ( [[UIScreen mainScreen] bounds].size.height == 667)?TRUE:FALSE #define
我正在使用 Apache Mahout 解决二进制分类问题。我使用的算法是 OnlineLogisticRegression,我目前拥有的模型强烈倾向于产生 1 或 0 的预测,没有任何中间值。 请提
我正在使用 mysql 查询返回适合 php 中某些汽车的产品数组,如下所示; array { [0]=> array(3) { ["sku"]=> string(16) "123a "
有谁知道在 Android 下获取绑定(bind)蓝牙设备的制造商和型号的方法吗?例如,如果我与蓝牙耳机配对,我希望能够确定该耳机的制造商和型号。 谢谢! 最佳答案 目前在 Android 中没有公共
如果我有 3 个模型要连接怎么办? 例如: 用户可以对许多不同的应用程序拥有许多不同的权限。 所以我需要一个表来存储: user_id permission_id application_id has
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我正在尝试为 XS Max 定制设计。之前我只是通过检查 main.bound.screen.height 来识别设备,对于 XS Max,根据此网站:https://www.paintcodeapp
如果我使用 ng-model 作为输入字段并将其清空,则 Angular 将其设置为 '' 而不是 null,即使它之前为 null。 这对我来说是一个问题,因为如果输入字段为空,我需要将 null
我需要获取型号,例如:对于 iPhone 6,我想要的型号是 N61AP 而不是 iPhone 7,2。我在objective-c中需要这个。 我尝试了一些方法,但我得到的只是'iPhone 7,2'
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我是一名优秀的程序员,十分优秀!