PHP скрипт. Simple URL checker – контроллер

30 апреля, 2008

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

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

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

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

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

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

class Main extends Controller {

	var $errorMes;

	function Main() {
		parent::Controller();

		$this->errorMes = null;
		$this->output->enable_profiler(TRUE);
	}

	/**
	 * Отображает главную страницу с таблицей результатов
	 */
	function index() {
		$this->load->model('resultmodel');
		$this->load->helper('form');

		$resData = $this->resultmodel->getGeneralData();
		$pageData['results'] = $resData;

		$pageData['title'] = "Simple URL checker - Главная";
		$pageData['error'] = $this->errorMes;
		$this->load->view('header', $pageData);
		$this->load->view('mainpage');
		$this->load->view('footer');
	}

	/**
	 * Отображает страницу с таблицей результатов проверок заданного URL
	 *
	 * @param $urlId - значение поля urlId в базе данных (таблица results)
	 */
	function urldetails($urlId) {
		if (!isset($urlId) || !is_numeric($urlId) || $urlId <= 0) {
			redirect('main/index');
		}
		$this->load->model('resultmodel');
		$this->load->helper('form');

		$urlInfo = $this->resultmodel->getUrlData($urlId);

		$pageData['title'] = "Simple URL checker - подробно";
		$pageData['urlInfo'] = $urlInfo;
		$pageData['urlId'] = $urlId;

		$this->load->view('header', $pageData);
		$this->load->view('urldetails');
		$this->load->view('footer');
	}

	/**
	 * Добавляет новый URL
	 *
	 * @param newurl (передается в массиве $_POST)
	 */
	function addurl() {
		$this->load->helper('form');
		$this->load->model('urlmodel');
		$url = $this->input->post('newurl');
		if ($url !== FALSE && $this->_isValidURL($url)) {
			$id = $this->urlmodel->addURL($url);
		}
		else {
			$this->errorMes = "Некорректный URL";
		}
		$this->index();
	}

	/**
	 * Отправляет запрос (и сохраняет его результаты) по указанным URL
	 *
	 * @param $urlId - значение поля urlId в базе данных (таблица results),
	 * если не задан или равен 0 - нужно пропинговать все URL из базы
	 */
	function ping($urlId = 0) {
		//этот метод мы рассмотрим немного позже
	}

	/**
	 * Проверяет формат URL
	 *
	 * @param строка, содержащая URL
	 * @return TRUE - если URL имеет правильный формат, FALSE - если нет
	 */
	function _isValidURL($url) {
		$strRegex = "/^[a-zA-Z0-9]+:\/\/[^ ]+$/";
        return preg_match($strRegex, $url);
	}

	/**
	 * Удаляет результат проверки URL
	 *
	 * @param $urlId - значение поля urlId в базе данных (таблица results)
	 * @param $id - значение поля id в базе данных (таблица results)
	 */
	function removeresult($urlId, $id) {
		$this->load->model('resultmodel');
		$this->resultmodel->removeResult($id);
		$this->urldetails($urlId);
	}

	/**
	 * Удаляет URL из базы данных
	 *
	 * @param $urlId - значение поля id в базе данных (таблица urls)
	 */
	function removeurl($urlId) {
		if (isset($urlId) && is_numeric($urlId) && $urlId > 0) {
			$this->load->model('urlmodel');
			$this->urlmodel->deleteURL($urlId);
		}
		$this->index();
	}
}

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

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

Конструктор (строки 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 !

Или на мой твиттер twitter link

]]>

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

]]>

Опубликовано в CodeIgniter, PHP, Web разработка Комментарии (2) »

]]>

Вы можете оставить комментарий. Трекбеки закрыты.

  • http://cat.asd4-base.ru/ Гаврила и Гавриил

    Каталог очень интересных сайтов. Рекомендую вам, так как этот каталог имеет множество нужных для людей рубрик. В каталоге имеются разные рубрики, вот некоторые из них: музыка, мебель, компьютеры и софт. Каждому сайту в каталоге выделена оптимизированная страница. Информация в катологе распределена в зависимости от популярности сайта в поисковых системах Yandex и Google.

  • http://cat.asd4-base.ru/ Гаврила и Гавриил

    Каталог очень интересных сайтов. Рекомендую вам, так как этот каталог имеет множество нужных для людей рубрик. В каталоге имеются разные рубрики, вот некоторые из них: музыка, мебель, компьютеры и софт. Каждому сайту в каталоге выделена оптимизированная страница. Информация в катологе распределена в зависимости от популярности сайта в поисковых системах Yandex и Google.

]]>
Tweet