Где разместить код ошибки в модели MVC для отображения ошибки пользователю - PullRequest
1 голос
/ 14 октября 2011

У меня есть простая настройка в Yii с моделью, видом и контроллером для управления таблицей БД.(создано с помощью Gii)

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

Должен ли япоместите метод проверки в модель, вызовите эту проверку из метода удаления контроллера.Но тогда я не уверен, как мне заставить всплывающее окно появляться на веб-странице.

Ответы [ 2 ]

2 голосов
/ 14 октября 2011

Я не могу говорить специально для Yii, но в целом с PHP 5.3 хорошей практикой будет выбрасывать ошибки из моделей (заметьте, читаемые человеком), а затем отлавливать их при вызове моделей в ваших контроллерах. Затем контроллеры могут передать список ошибок представлениям, которые будут отвечать за отображение ошибок пользователям.

<?php
class Model {
    public function doImportantStuff() {
        //Do stuff
        if(true) {
            throw new Exception('Important stuff could not be completed due to this important error.');
        }
    }
}

class Controller {
    public function index() {
        $data = array();
        $crucial = new Model();

        try {
            $crucial->doImportantStuff();
        } catch(Exception $e) {
            $data['errors'][] = $e;
        }
    }
}

//And in the view
<?php if($data['errors']): ?>
<?php foreach($data['errors'] as $error): ?>
    <p><?= $error->getMessage(); ?></p>
<?php endforeach; ?>
<?php endif; ?>
1 голос
/ 14 октября 2011

Вы хотели бы поместить свои правила проверки в свою модель, в метод правил, который Gii должен был создать для вас.Вы можете использовать предопределенное правило проверки или создать свое собственное, см. здесь .Возможно, вы захотите определить атрибут «сценария» для этой функции удаления, а затем вы можете ограничить свое пользовательское правило этим действием удаления.

Действие будет определено в вашем контроллере, - если вы использовали Gii дляДля создания CRUD у вас должен быть пример кода для ссылки.

По вашему мнению, вы можете использовать CActiveForm :: error () для отображения ошибки на странице или вызвать getErrors () для извлечения ошибок для создания пользовательского состояния ошибки (с помощью js или css и т. Д.).

Другой вариант - определить функцию onsubmit с js, которая выполняет вызов ajax для проверки удаления.Функция до отправки.(Этот вызов ajax будет выполнен для функции контроллера, и вы все равно захотите выполнить проверку в модели перед удалением.)

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