Simple URL checker - контроллер

30 апреля, 2008

Simple URL checker - контроллер
Сегодня я продолжу рассказ о разработке web приложения, выполняющего проверку URL.

Но, прежде всего, кратко напомню, что уже сделано на данный момент. Мы определились со структурой приложения и базы данных, установили и настроили фреймворк, а также написали модели для работы с БД.

Примечание. Ссылки на все предыдущие статьи находятся здесь.

Теперь самое время заняться контроллером.

Т.к. приложение довольно простое нам вполне хватит одного контроллера, назовем его main. Кстати, при настройке CodeIgniter в файле routes.php мы указали, что этот контроллер должен загружаться по-умолчанию.

Со структурой приложения и его функциями мы уже определились, переходим к написанию методов контроллера.

Code (php)
  1. class Main extends Controller {
  2.  
  3.     var $errorMes;
  4.  
  5.     function Main() {
  6.         parent::Controller();
  7.  
  8.         $this->errorMes = null;
  9.         $this->output->enable_profiler(TRUE);
  10.     }
  11.  
  12.     /**
  13.      * Отображает главную страницу с таблицей результатов
  14.      */
  15.     function index() {
  16.         $this->load->model(‘resultmodel’);
  17.         $this->load->helper(‘form’);
  18.  
  19.         $resData = $this->resultmodel->getGeneralData();
  20.         $pageData[‘results’] = $resData;
  21.  
  22.         $pageData[‘title’] = "Simple URL checker - Главная";
  23.         $pageData[‘error’] = $this->errorMes;
  24.         $this->load->view(‘header’, $pageData);
  25.         $this->load->view(‘mainpage’);
  26.         $this->load->view(‘footer’);
  27.     }
  28.  
  29.     /**
  30.      * Отображает страницу с таблицей результатов проверок заданного URL
  31.      *
  32.      * @param $urlId - значение поля urlId в базе данных (таблица results)
  33.      */
  34.     function urldetails($urlId) {
  35.         if (!isset($urlId) || !is_numeric($urlId) || $urlId <= 0) {
  36.             redirect(‘main/index’);
  37.         }
  38.         $this->load->model(‘resultmodel’);
  39.         $this->load->helper(‘form’);
  40.  
  41.         $urlInfo = $this->resultmodel->getUrlData($urlId);
  42.  
  43.         $pageData[‘title’] = "Simple URL checker - подробно";
  44.         $pageData[‘urlInfo’] = $urlInfo;
  45.         $pageData[‘urlId’] = $urlId;
  46.  
  47.         $this->load->view(‘header’, $pageData);
  48.         $this->load->view(‘urldetails’);
  49.         $this->load->view(‘footer’);
  50.     }
  51.  
  52.     /**
  53.      * Добавляет новый URL
  54.      *
  55.      * @param newurl (передается в массиве $_POST)
  56.      */
  57.     function addurl() {
  58.         $this->load->helper(‘form’);
  59.         $this->load->model(‘urlmodel’);
  60.         $url = $this->input->post(‘newurl’);
  61.         if ($url !== FALSE && $this->_isValidURL($url)) {
  62.             $id = $this->urlmodel->addURL($url);
  63.         }
  64.         else {
  65.             $this->errorMes = "Некорректный URL";
  66.         }
  67.         $this->index();
  68.     }
  69.  
  70.     /**
  71.      * Отправляет запрос (и сохраняет его результаты) по указанным URL
  72.      *
  73.      * @param $urlId - значение поля urlId в базе данных (таблица results),
  74.      * если не задан или равен 0 - нужно пропинговать все URL из базы
  75.      */
  76.     function ping($urlId = 0) {
  77.         //этот метод мы рассмотрим немного позже
  78.     }
  79.  
  80.     /**
  81.      * Проверяет формат URL
  82.      *
  83.      * @param строка, содержащая URL
  84.      * @return TRUE - если URL имеет правильный формат, FALSE - если нет
  85.      */
  86.     function _isValidURL($url) {
  87.         $strRegex = "/^[a-zA-Z0-9]+:\/\/[^ ]+$/";
  88.         return preg_match($strRegex, $url);
  89.     }
  90.  
  91.     /**
  92.      * Удаляет результат проверки URL
  93.      *
  94.      * @param $urlId - значение поля urlId в базе данных (таблица results)
  95.      * @param $id - значение поля id в базе данных (таблица results)
  96.      */
  97.     function removeresult($urlId, $id) {
  98.         $this->load->model(‘resultmodel’);
  99.         $this->resultmodel->removeResult($id);
  100.         $this->urldetails($urlId);
  101.     }
  102.  
  103.     /**
  104.      * Удаляет URL из базы данных
  105.      *
  106.      * @param $urlId - значение поля id в базе данных (таблица urls)
  107.      */
  108.     function removeurl($urlId) {
  109.         if (isset($urlId) && is_numeric($urlId) && $urlId > 0) {
  110.             $this->load->model(‘urlmodel’);
  111.             $this->urlmodel->deleteURL($urlId);
  112.         }
  113.         $this->index();
  114.     }
  115. }

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

Взаимодействие посетителя с приложением

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

Метод index (строки 15-27). Формирует главную страницу сайта. На этой странице должны быть размещены таблица с усредненными результатами проверок, форма добавления нового URL и кнопка, запускающая проверку всех URL.

Поэтому в начале метода мы загрузили модель (resultmodel) и хелпер form (содержит методы для создания форм). После этого с помощью модели получаем данные (строка 19), формируем массив с данными для представления ($pageData) и загружаем представления.

Примечание. Сами представления мы рассмотрим немного позже, но думаю, уже по названию понятно, что header формирует заголовок страницы, mainpage – основное содержимое главной страницы, а footer – хвостовик.

Метод urldetails (строки 34-50). Формирует страницу с подробными данными о проверках выбранного URL. Работает аналогично методу index, но, естественно, используются другой метод модели (getUrlData) и представление (urldetails).

В начале метода (строки 35-37) выполняется проверка параметра $urlId и если он имеет недопустимое значение, посетитель перенаправляется на главную страницу.

Для добавления URL в базу данных служит метод addurl (строки 57-68). Здесь мы читаем url из массива $_POST и выполняем проверку.

Проверка простейшая, выполняется с помощью регулярного выражения в методе _isValidURL (строки 86-89). URL считается правильным если содержит символы «://» и не содержит пробелов, кроме того в первой части URL могут быть только английские буквы и цифры.

Естественно, можно написать более сложное выражение для проверки, но я хотел оставить возможность добавлять локальные адреса (вроде http://localhost).

Если URL прошел проверку, то он добавляется в базу данных. В противном случае – формируем сообщение об ошибке. После этого вызываем метод index, т.е. загружаем главную страницу.

Метод removeresult (строки 97-101). Удаляет указанный результат проверки (используется метод removeResult модели resultmodel). После удаления загружаем страницу с подробными данными о выбранном URL.

removeurl (строки 108-114) – удаляет URL из базы данных. Здесь тоже ничего особенного. Используем метод deleteURL модели urlmodel.

Вызовы методов removeresult и removeurl происходят при клике по ссылке «Удалить», которая находится напротив соответствующего URL или результата проверки.

Осталось рассмотреть метод ping. Но он получился довольно объемный, поэтому о нем я напишу отдельный пост.

До встречи!

P.S. Ссылки на все статьи и примеры цикла я публикую здесь.

Понравилась статья? Подпишитесь на продолжение rss link !

Добавьте эту страницу в google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Опубликовано в CodeIgniter, PHP, Web разработка

Комментариев нет

Вы можете отслеживать обсуждение записи с помощью RSS 2.0 rss link

Вы также можете оставить комментарий, или трекбек с Вашего сайта.

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

Введите ваш комментарий

* - обязательные для заполнения поля

Quicktags: