我想处理有关表单验证的应用程序反馈。 为此,我使用
检查控制器中的模型验证// 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');
}
我知道有一种方法可以使用'error'=&gt;摆脱表单字段错误false,但我想为整个应用程序设置它,因此适用于所有形式的所有字段。 它必须有一种方法来设置对象本身,如果有人告诉我,我将感激不尽。 多谢!
答案 0 :(得分:0)
编辑:这并不会真正禁用错误输出,但会隐藏错误:转到webroot / css / cake.generic.css将display:none
添加到选择器div.error-message
。这是实现你想要的最简单的方法。
答案 1 :(得分:0)
虽然覆盖单个属性似乎有点极端,但您可以通过扩展核心FormHelper来实现这一点。这将允许您使Anh Pham的original suggestion成为所有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()
)。 CakePHP 2.0引入了辅助别名来克服这一点,但是现在必须采用一些技巧来继续使用“Form
”。我发现的一篇博文显示了如何backport the functionality和另一个管理允许helper to do it本身。我个人使用以下内容没有任何问题:
// 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');
}