Обработка ошибок в PHP и Codeigniter.Как это сделать?Как избежать рекурсивного кода - PullRequest
0 голосов
/ 06 января 2012

Я использую Codeigniter.

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

Один из таких сценариев, сценарий whois проверяет владельца доменного имени. Однако если пользователь вводит недопустимое имя домена, здесь и везде появляются всевозможные ошибки.

Например, если пользователь вводит данные в stack.-com, это, конечно, недопустимый домен. Таким образом, когда я вызываю своего помощника, который выполняет запрос, результат не возвращается, и возвращается множество ошибок. Есть также ошибки, когда я пытаюсь отобразить пустой массив для пользователя.

Мой вопрос касается ошибок.

Я мог бы использовать preg_match и проверить, действителен ли домен. Если нет, я устанавливаю переменную ошибки, которую я намерен вывести пользователю.

Однако, прежде чем мой контроллер доберется до оператора if else, который решает, показывать ли страницу ошибок или страницу результатов, программа выполняет запросы, и доступ к методам, чтобы получить данные, которые были без ошибок, заставил бы данные передаваться к результату.

I.E Я знаю, что есть ошибка, но все еще появляется много других ошибок, потому что неверный элемент передается другим моим сценариям.

С Codeigniter и настройкой MVC, каков наилучший способ перехвата ошибки и ее отображения пользователю без использования исключений, которые делают одно и то же снова и снова?

Спасибо

РЕДАКТИРОВАТЬ С ИДЕЕЙ

try
{
$this->load->model('whois');
$this->whois->process('domain.-com');
}
catch
{
$this->load->view('errors',$errordata);
$this->load->view('footer');
die;
}

$this->load->view('normal_content');
$this->load->view('footer');

Это рекомендуемая установка для использования исключений с codeigniter? в моей модели функция будет генерировать исключения, если есть проблема. Затем оператор catch отобразит их и умрет, таким образом, не показывая содержимое .. Это кажется неправильным ..?

Ответы [ 2 ]

1 голос
/ 08 января 2012

Вот как я обычно справляюсь:

  1. Отправьте вашу форму обратно по тому же маршруту
  2. Если есть ошибки, показать форму снова, с состоянием ошибки
  3. Если все прошло, перенаправить СЕЙЧАС на следующий шаг / состояние успеха

Пример кода:

<?php
...

public function form()
{
    if (strtoupper($this->input->server('REQUEST_METHOD')) == 'POST')
    {
        try {
            // handle all your validation here
            redirect('success_route');
            exit;
        }
        catch (Exception $e)
        {
            // this could get a little fancier, but a simple solution is to pass the exception
            // directly to the view.  you could also load the `errors` view here, but return the
            // content to a variable and pass to your full view
            $this->load->vars('exception', $e);
        }
    }

    $this->load->view('normal_content');
    $this->load->view('footer');
}

...
0 голосов
/ 06 апреля 2013

Вы должны сделать следующее

1) database.php: $ db ['default'] ['db_debug'] = FALSE;

2) в вашем модальном файле

try {
   $query_str = "SELECT * FROM `pro_property` WHERE username = '".$username."'";
   $result = $this->db->query($query_str);

   if (!$result)
   {
       throw new Exception('error in query');
       return false;
   }        

   return $result;

} catch (Exception $e) {
    print_r($e);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...