Как генерировать ошибки в PHP с использованием архитектуры MVC - PullRequest
0 голосов
/ 02 августа 2011

Я пытаюсь изменить архитектуру веб-приложения, разработанного мной для использования шаблона MVC, но я не знаю, как обрабатывать ошибки.Например:

class AM_Products extends AM_Object 
{
    public function save( $new_data = array() ) 
    {
        // Validate input

        // Save input
    }
}

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

class AM_Products extends AM_Object 
{
    public function save( $new_data = array() ) 
    {
        // Validate input
        if ( ! validate( 'text', $new_data['name'] ) ) {
            throw new Exception( 'Invalid data entered' );
        }

        // Save input
    }
}

Или вместо этого я должен добавить дополнительную функцию и оставить ее длявид / контроллер:

if ( $product->save( $data )->has_error() ) {
    $error = $product->get_error();
}

echo '<p>' . $error . '</p>';

Ответы [ 2 ]

2 голосов
/ 02 августа 2011

Не бросайте исключения. Исключения составляют исключительные ситуации - недопустимые данные, введенные в форму, должны не вызывать исключение.

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

Создание исключений для валидации приведет к очень хрупкой и сложной в использовании системе. Что произойдет, если вы захотите просто показать пользователю, что одно из предоставленных им полей является недействительным, и дать ему возможность исправить его? Как вы собираетесь поймать исключение и узнать, как отобразить соответствующую запись / форму?

2 голосов
/ 02 августа 2011

Брось исключение.В противном случае вы должны всегда помнить, чтобы вызывать has_error / get_error после любой операции.И у вас будет много дублированного кода.А что, если ошибка должна быть обработана не методом a(), вызвавшим save(), а методом b(), вызвавшим метод a()?Вы должны будете вернуть ошибку от a(), а b() также должен будет проверить ее на наличие ошибки.

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