CETPHP SET error => false FOR All Forms - PullRequest
       0

CETPHP SET error => false FOR All Forms

0 голосов
/ 11 сентября 2011

Я хочу обработать отзыв приложения относительно, в этом случае проверки формы. Для этого я проверяю проверку модели в контроллере, используя

// 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' => false, но я хочу установить это для всего приложения, то есть для всех полей во всех формах. Должен быть способ установки самого объекта, и я был бы благодарен, если бы кто-то сказал мне. Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 12 сентября 2011

Хотя может показаться немного экстремальным подход к переопределению одного свойства, вы можете достичь этого, расширив базовый FormHelper. Это позволит вам сделать оригинальное предложение Анх Фама по умолчанию для всех экземпляров 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». В одном сообщении в блоге, которое я нашел, показано, как ретранслировать функциональность , а в другом - разрешить помощнику сделать это . Лично я без проблем использую следующее:

// 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');

}
0 голосов
/ 11 сентября 2011

Редактировать: Это на самом деле не отключает вывод ошибок, но скрывает ошибку: перейдите в webroot / css / cake.generic.css и добавьте display:none в селектор div.error-message.Это самый простой способ добиться того, чего ты хочешь, о котором я могу подумать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...