Комментарии: 38

Предыдущие 10 комментариев

  1. Админ

    Если использовать один тип обработчиков (не считая шаблонов), можно добавить и простую поддержку исключений. Например, заключить подключение обработчика в блок try, чтобы не писать каждый раз try-catch внутри обработчика.

    Также следует явно определить класс HTTP-исключений с уточнением семантики аргументов конструктора $message и $code, чтобы не использовать для генерации таких исключений базовый класс Exception. Уточнять тип исключения можно и в одном блоке catch:

    catch (Exception $e)
    {
        error($e instanceof HttpException ? $e->getCode() : 503);
    }
    
  2. Админ

    Если расширять блок try сверх упомянутого в предыдущем комментарии охвата, не нужно забывать, что при ошибках запроса к объекту вызов функции error до вызова контроллеров позволял использовать контроллеры для обработки таких ошибок.

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

  3. Админ

    Можно добавить функцию abort:

    function abort($code = 500, $message = '')
    {
        throw new HttpException($message, $code);
    }
    

    А также добавить второй необязательный аргумент $message в функцию error.

  4. Юлия

    Образец контроллера, реализующего обратную совместимость:

    <?php
    
    if (($r0['bits'] & 48) == 48) require PATH.$r0['module'].'.d.php';
    
    db_close($link);
    
    if (($r0['bits'] & 48) == 32)
    {
        require PATH.$r0['module'].'.h.php';
    
        // коррекция номера режима для подключения шаблона
        if (($r0['bits'] & 48) == 32) $r0['bits'] ^= 48;
    }
    
  5. Юлия

    Вышла версия 3.14 или Pi (π).

    Список изменений:

    • возвращена схема подключения файлов с одним типом контроллера и отдельно подключаемым вложенным шаблоном;
    • добавлена функция db_close, которую можно использовать внутри контроллера;
    • добавлена функция db_open вместо функции mysqli_open;
    • добавлена поддержка исключений и класс HTTP-исключений HttpException;
    • добавлена функция abort для генерации HTTP-исключений (непосредственно в коде контроллера можно по-прежнему использовать функцию error и return, а исключения генерировать на более глубоких уровнях вложенности вызовов);
    • добавлен второй необязательный параметр в функцию error для передачи текстового сообщения, которое сохраняется в переменной $page['content'].

    Материалы блога будут постепенно обновляться с учетом перечисленных изменений.

    Рассылку запущу сегодня или в один из ближайших дней.

  6. Админ

    Для страницы ошибки будет возвращено поле name, определяемое непосредственно в функции error, со значениями наподобие "404" или "503". Хранение таких значений в поле id себя не оправдало. Это поле сохранится, но будет содержать пустую строку, как это было в версиях до 3.06 включительно.

    Напоминаю, что функцию error разрешено изменять. Т.е. все сказанное относится к поведению программного каркаса по умолчанию. Также не следует воспринимать возврат поля name, как принуждение к его использованию вместо, например, поля title. Можно продолжать работать по предложенной ранее схеме, используя команду

    $page['title'] = $page['name'];
    

    вместо команды

    $page['title'] = $page['id'];
    
  7. Админ

    В связи с планируемым переносом встроенных функций каркаса в подключаемые файлы, а также расширением состава встроенных функций рекомендую использовать require_once для подключения в контроллерах файлов наподобие query.php, find.php, collection.php и т.п. Также можно оперативно вносить соответствующие изменения по мере появления среди подключаемых файлов каркаса определенных файлов.

  8. Юлия

    Объединила код функции db_open, используемый по умолчанию, и расширенный код из комментария к статье, чтобы перенести функцию в подключаемый файл:

    function db_open($config = 'include/dbconfig.php')
    {
      require PATH.$config;
      if (($link = mysqli_connect($host, $user, $pw, $db)) && isset($charset) && !$link->set_charset($charset))
      {
        $link->close();
        return false;
      }
      return $link;
    }
    

    При наличии конфигурационного параметра $charset с отличным от NULL значением будет выполняться установка кодировки.

Отправить комментарий

Ваш адрес E-mail не будет опубликован.