Codeigniter: создание вспомогательных и глобальных массивов сообщений для обратной связи и ошибок - PullRequest
0 голосов
/ 24 марта 2012

Таким образом, есть случаи, когда может быть одна или несколько ошибок, чтобы сообщить пользователю (и сообщить мне о них), которые могут быть вызваны на уровне контроллера (ввод, проверка) или уровне модели.

Я рассматриваю возможность создания базового помощника для «обратной связи», который в основном содержит глобальные массивы сообщений (уведомление, ошибка, успех)

Тогда, либо на уровне модели или контроллера, если что-то пойдет не так (или правильно!), Я могу вызвать функцию обратной связи.

feedback('error','Connection is temporarily down blah')

Мне не нужно передавать его моим представлениям, так как он будет настроен глобально, поэтому я могу просто вызвать что-то вроде $ this-> feedback-> display_all ().

Это нормально / MVC дружественный способ делать вещи? Мне кажется, это простой метод для реализации

Ответы [ 2 ]

1 голос
/ 25 марта 2012

Для своего проекта я создал крошечную модель mdl_error.

Эта модель имеет одну общедоступную функцию throwError и несколько личных помощников, которые будут показывать пользователю флэш-уведомления и при необходимости отправлять мне электронное письмо с текущими значениями и данными сеанса.Модель загружается автоматически и вызывается только при необходимости.

Вот как это выглядит в основном:

<?php
class mdl_error extends CI_Model
{
//types: error, alert, good
function throwError($type, $message, $info="", $flash=true, $email=true)
{

    if($flash){
        $alert = $type."|".$message;
        $this->session->set_userdata(array("flash" => $alert));
    }
    if($email){
        $problems = $this->recursivePrintingOfVariables($info);
        $sessionData = $this->recursivePrintingOfVariables($this->session->userdata);

        $emailMessage = "Name<br/> <br/>Something has happened. <br/> <br/>";
        $emailMessage .= "The type was: {$type}<br/>The message was: {$message}<br/> <br/> <br/>";
        $emailMessage .= "Here is the local variables at the time:<br/> <br/>{$problems}<br/> <br/> <br/>";
        $emailMessage .= "Here is the session data:<br/> <br/>{$sessionData}<br/> <br/> <br/>";
        $emailMessage .= "Please solve this problem or we are all dooooooomed.<br/><br/>Love,<br/>Website";
        $this->load->library('email');
        $this->email->from("my email");
        $this->email->to("error@whatever.com");
        $this->email->subject($type.' Message from Website');
        $this->email->message($emailMessage);
        $this->email->send();

    }

}

function recursivePrintingOfVariables($info)
{
    $keys = array_keys($info);
    $string = "";
    foreach($keys as $key){
        $string .= $key." => ";
        if(is_array($info[$key])){
            $string .= "Inner Array<br/>";
            $string .= "<div style='margin-left:15px;'>";
            $string .= $this->recursivePrintingOfVariables($info[$key]);
            $string .= "</div>";
        }else{
            $string .= $info[$key];
        }
        $string .= "<br/><br/>";
    }
    return $string;
}

}

Затем, если в моем коде есть место, где происходит ошибка, я просто вызываю:

$this->mdl_error->throwError("error","something happend", get_defined_vars());
0 голосов
/ 24 марта 2012

Если вы используете show_error («Ваше сообщение об ошибке»);Функция в вашем контроллере вы добьетесь того же.Если вы хотите настроить внешний вид ошибки, вам нужно работать с файлом error_general.php, который находится в application / errors.

Если вы также хотите регистрировать ошибки, вы можете использовать log_message ('level''сообщение');функция в вашем контроллере.

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