Вызов функции-члена trigger () по модели с конструктором - PullRequest
2 голосов
/ 31 августа 2011

У меня есть модель, в которой я хочу перевести ошибку проверки формы.Поэтому я переместил заполнение $validate в конструктор:

function __construct() {
    $this->validate = array(
        'url' => array(
            'url' => array(
                'rule' => array('url'),
                'message' => __('Enter a valid URL', true),
            ),
        ),
        'revisit' => array(
            'numeric' => array(
                'rule' => array('numeric'),
                'allowEmpty' => true,
            ),
        ),
        'reading_list' => array(
            'boolean' => array(
                'rule' => array('boolean'),
            ),
        ),
    );
}

Каждый раз, когда я открываю какую-либо страницу, я получаю следующую ошибку:

Fatal error: Call to a member function trigger() on a non-object in /home/mu/Branches/cakemarks/cake/libs/model/model.php on line 2106

Call Stack:
    0.0005     347980   1. {main}() /home/mu/Branches/cakemarks/app/webroot/index.php:0
    0.0548    3580716   2. Dispatcher->dispatch() /home/mu/Branches/cakemarks/app/webroot/index.php:83
    0.0597    3735300   3. Dispatcher->_invoke() /home/mu/Branches/cakemarks/cake/dispatcher.php:171
    0.1451    7428100   4. call_user_func_array() /home/mu/Branches/cakemarks/cake/dispatcher.php:204
    0.1451    7428336   5. BookmarksController->startscreen() /home/mu/Branches/cakemarks/cake/dispatcher.php:0
    0.1451    7429132   6. Model->find() /home/mu/Branches/cakemarks/app/controllers/bookmarks_controller.php:100

До того, как я использовал __()там, у меня могло бы быть $validate снаружи в полях, и оно работало хорошо.

Как я могу получить там сообщение проверки?

1 Ответ

3 голосов
/ 31 августа 2011

Переопределение конструктора - это нормально, но вам нужно убедиться, что оригинальный конструктор работает:

public function __construct($id = false, $table = null, $ds = null) {
    // do your thing

    parent::__construct($id, $table, $ds);
}

Также руководство рекомендует :

Если вы хотите, чтобы все сообщения об ошибках валидации были переведены по умолчанию, простое решение - добавить в вас следующий код app_model.php:

function invalidate($field, $value = true) {
    return parent::invalidate($field, __($value, true));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...