Forms CakePHP设置错误=>;所有形式的错误
我想处理有关表单验证的应用程序反馈。 为此,我在controller中检查模型验证,使用Forms CakePHP设置错误=>;所有形式的错误,forms,cakephp,Forms,Cakephp,我想处理有关表单验证的应用程序反馈。 为此,我在controller中检查模型验证,使用 // VALIDATE if ($this->Event->validates($this->data)) { // SAVE $this->Event->create(); if ($this->Event-&
// VALIDATE
if ($this->Event->validates($this->data))
{
// SAVE
$this->Event->create();
if ($this->Event->saveAll($this->data, array('validate' => false)))
{
$this->Session->setFlash('Evenimentul a fost salvat!', 'flash_admin_success');
$this->redirect(array('action' => 'index', 'admin' => true));
} else {
$this->Session->setFlash('Evenimentul nu a putut fi salvat. Va rugam sa incercati din nou!', 'flash_admin_error');
}
////////
$errors = 'O EROARE';
$this->set(compact('errors'));
}
else
{
// GET ERRORS to display it nicely :)
$errors = $this->Event->invalidFields();
$flash = '';
foreach($errors as $error)
{
$flash .= $error."<br />";
}
$this->Session->setFlash($flash, 'flash_admin_error');
}
//验证
如果($this->Event->validates($this->data))
{
//拯救
$this->Event->create();
如果($this->Event->saveAll($this->data,array('validate'=>false)))
{
$this->Session->setFlash('evenimentula fost salvat!','flash\u admin\u success');
$this->redirect(数组('action'=>'index','admin'=>true));
}否则{
$this->Session->setFlash('Evenimentul nu a putut fi salvat.Va rugam sa incercati din nou!','flash\u admin\u error');
}
////////
$errors='O EROARE';
$this->set(压缩('errors');
}
其他的
{
//获取错误以很好地显示它:)
$errors=$this->Event->invalidFields();
$flash='';
foreach($errors作为$error)
{
$flash.=$error.“
”;
}
$this->Session->setFlash($flash,'flash\u admin\u error');
}
我知道有一种方法可以使用'error'=>false来消除表单字段错误,但我想为整个应用程序设置此值,从而为所有表单中的所有字段设置此值。
它必须有一种设置对象本身的方法,如果有人告诉我,我将不胜感激。
太多了 编辑:这并不会真正禁用错误输出,但会隐藏错误:转到webroot/css/cake.generic.css添加
display:none
到选择器div.error-message
。这是我能想到的实现您想要的最简单的方法。尽管覆盖单个属性似乎有点极端,但您可以通过扩展核心FormHelper来实现这一点。这将允许您将Anh Pham设置为所有FormHelper实例的默认值:
// app/views/helpers/app_form.php
App::import('Helper', 'Time');
class AppFormHelper extends FormHelper {
public $_inputDefaults = array('error' => false);
}
现在要像在CakePHP 1.3中一样使用它,您必须在整个应用程序中使用“AppForm
”,从现在开始引用此帮助程序(即$this->AppForm->input()
)。CakePHP2.0引入了帮助器别名来克服这一问题,但现在我们必须借助一些技巧来继续使用“表单”
”。我发现的一篇博文展示了如何使用它,而另一篇博文则展示了如何管理它本身。我个人使用以下内容没有任何问题:
// app/views/app.php
class AppView extends View {
function &_loadHelpers(&$loaded, $helpers, $parent = null) {
$return = parent::_loadHelpers($loaded, $helpers, $parent);
# rename App helpers (ie. AppHtml -> Html)
foreach ($return as $helperName => $helper) {
if (substr($helperName, 0, 3) === 'App') {
$newHelperName = substr($helperName, 3);
$return[$newHelperName] = $return[$helperName];
}
}
# done
return $return;
}
}
要使用上面新创建的类,只需将以下内容添加到AppController
:
// app/app_controller.php
class AppController extends Controller {
public $helpers = array(/*...*/, 'AppForm');
public $view = array('App');
}
为什么这么复杂?在这里,您似乎为一些已经开箱即用的东西创造了很多开销……我只想定制验证错误printig——更清楚地说,我想在某个时候实现一个jQueryUI,这样这些错误就会被放入一个“奇特”的框中。上面的代码不是最终的。谢谢你的建议。我是舒尔,在很多情况下我都会按照你说的去做。随着时间的推移,我希望变得更有效率。如果你知道如何去做我一开始要求的事情,我会提前感谢你!谢谢你的回答!我只是试着像你建议的那样设置_inputDefaults,但是没有效果,即使我没有在视图表单中覆盖它。如果它对你有用,也许我做错了什么,尽管我对此表示怀疑。如果你能想出另一种方法,我很感激!是的,我担心最后我不得不这么做。非常感谢您的支持!!非常感谢你,戴泽尔!这比我需要的还要多,但真的很好!再次感谢您的时间!