Навигация
|
Codeigniter: ВведениеЭто урок предназначен для того, чтобы познакомить вас с CodeIgniter и основными принципами архитектуры MVC. Он покажет вам основы применения CodeIgniter при конструировании приложения, шаг за шагом. В этом уроке вы создадите основное приложение новостей. Вы начнете с написания кода, который будет загружать статичные страницы. Затем, вы создадите раздел новостей, который будет считывать записи новостей из базы данных. Наконец, вы добавите форму, чтобы добавлять новости в базу данных.
Этот урок предполагает, что вы загрузили CodeIgniter и установили фреймворк в вашем окружении разработки. Для начала давайте установим контроллер для отображения статичных страниц. Разберем адрес запроса http://site/news/latest/10 Тут /news/ - сам контроллер, /latest/ - метод контроллера, а смысл метода заключается в выводе по 10 элементов новостей например. Создайте файл в application/controllers/pages.php со следующим кодом. <?php public function view($page = 'home') } Вы создали класс с названием Pages, с методом отображения, который приниамет один аргумент $page. Класс страниц расширяет класс CI_Controller. Это означает, что новый класс страниц получит доступ к методам и переменным, определенным в классе CI_Controller (system/core/Controller.php). Как любой другой класс PHP, вы ссылаетесь на него из вашего контроллера через $this. Ссылка на $this позволяет вам загружать библиотеки, отображения и обычные команды фреймворка. Мы создадим два отображения (шаблоны страниц), которые будут представлять шапку и подвал нашей страницы. <html> Шапка содержит основной код HTML, который вы будете выводить перед загрузкой основного отображения, вместе с заголовком. Она также выводит переменную $title, которая будет позже определена в контроллере. Теперь создадим подвал в application/views/templates/footer.php, который включает следующий код: <strong>© 2011</strong> Добавление логики в контроллер Измените в файле application/controllers/pages.php public function view($page = 'home') $this->load->view('templates/header', $data); Теперь, если страница существует, она будет загружена, включая шапку и подвал, и будет показана пользователю. Если страница не существует, будет показана ошибка "404 Page not found". Первая строка в этом метода проверяет существование страницы. Родная функция PHP file_exists() используется для проверки существования файла. Функция show_404() встроена в CodeIgniter, она позволяет отображать страницы ошибок по умолчанию. В шаблоне шапки переменная $title была использована для настройки заголовка страницы. Значение заголовка определяется в этом методе, но вместо присвоения значения переменной, оно присваивается элементу title массива $data. Наконец мы загружаем отображения, чтобы они отобразились. Второй параметр метода view() используется для передачи значений в отображение. Каждое значение в массиве $data ассоциируется переменной с именем, соответствующим ключу. Поэтому значение $data['title'] в контроллере эквивалентно значению $title в отображении. Роутинг Когда вы посещаете index.php/pages/view/about, вы увидите страницу about, включающую шапку и подвал. Используя собственные правила роутинга, вы можете переадресовать любой URI к любому контроллеру и методу, изменяя нормальное поведение: Давайте сделаем это. Откройте файл роутинга, находящийся в application/config/routes.php и добавьте две следующие строки. Удалите весь другой код, который устанавливает любые элементы в массиве $route. Меняем: На: CodeIgniter считывает его правила роутинга сверху вниз, и перенаправляет запрос по первому совпавшему правилу. Каждое правило это регулярное выражение (слева), перенаправляющее запрос в указанный контроллер и метод (справа). Когда приходит запрос, CodeIgniter ищет первое совпадение, и вызывает соответствующий контроллер и метод, возможно с аргументами. Здесь второе правило в массиве $routes, соответствующее любому запросу, используя строку шаблона (:any), и передающее параметр в метод view() класса Pages: Если вызвать например страницу 'about', то код будет равнозначен: class Pages extends CI_Controller { public function view($page = 'about') Теперь посетите index.php/about. (На моем примере в браузере: http://site/index.php/about).
Теперь время для введения в динамическое содержание и начало использования базы данных. Установка вашей модели Модели это место, где вы получаете, вставляете и обновляете информацию в вашей базе данных и других хранилищах данных. Они представляют ваши данные. Откройте директорию application/models и создайте новый файл news_model.php, затем добавьте в него следующий код. Убедитесь, что вы сконфигурировали вашу базу данных(application/config/database.php)
Он создает новую модель, расширяющую CI_Model и загружающую библиотеку базы данных. Это делает доступным класс базы данных через объект $this->db. Перед тем, как делать запросы в базу данных, должна быть создана ее схема. Соединитесь с вашей базой данных, и выполните команду SQL ниже. Кроме того, добавьте несколько записей. CREATE TABLE news ( Таблицы созданы, после я добавил пару записей в таблицу. Теперь, когда база данных и модель настроены, вам нужен будет метод для получения всех постов из нашей базы данных. Чтобы сделать это, будет использован слой абстракции базы данных, включенный в CodeIgniter — Active Record. Это сделает возможным записать ваши «запросы» однажды и сделать их работающими во всех поддерживаемых системах баз данных. Добавьте следующий код внутрь класса в вашей модели. public function get_news($slug = FALSE) С этим кодом вы можете выполнить два различных запроса. Вы можете получить все новые записи, или получить один элемент по его ЧПУ. Вы можете заметить, что переменная $slug не очищается перед выполнением запроса; Active Record сделает это для вас. Отображение новостей <?php public function __construct() public function index() public function view($slug) Глядя на этот код, вы можете увидить некоторое соответствие с файлами, которые мы создали ранее. Во-первых, метод __construct();, он вызывает конструктор его родительского класса (CI_Controller) и загружает модель, поэтому она может быть использована во всех методах этого контроллера. Далее, есть два метода, для просмотра всех новостей и одного конкретного элемента. Вы можете увидеть переменную $slug, которая передается методу модели во втором методе. Модель использует эту переменную для идентификации новости, которую следует вернуть. Теперь данные получаеются в контроллере через нашу модель, но ничего не отображается. Следующая вещь, которую мы сделаем, это передача этих данных в отображения. Изменяем функцию index //public function index() $this->load->view('templates/header', $data); Код выше выбирает все записи новостей из модели и ассоциирует их в переменную. Значение для заголовка также ассоциируется с элементом $data['title'] и все его данные передаются в отображения. Теперь вы должны создать отображение, для вывода элементов новостей. Создайте файл application/views/news/index.php и поместите в него следующее. Страница обзора новостей завершена, но страница для отображения индивидуальных новостей все еще отсутствует. Модель, созданная ранее, сделана таким образом, чтобы использовать ее и для этой функциональности. Вернитесь к контроллеру News и добавьте следующие строки в файл. //public function view($slug) if (empty($data['news_item'])) $data['title'] = $data['news_item']['title']; $this->load->view('templates/header', $data); Вместо вызова get_news() без параметра, передается переменная $slug, поэтому функция вернет указанный элемент. Единственная вещь, которую останется сделать, это создать соответствующее отображение в application/views/news/view.php. Поместите следующий код в этот файл. <?php Роутинг Так как шаблон с правилом роутинга был создан ранее, сейчас вам нужно добавить дополнительный роут к контроллеру, который вы только что сделали. Редактируйте ваш файл с роутами (application/config/routes.php), чтобы он выглядел, как показано ниже. Это позволит убедиться в том, что запросы к контроллеру новостей поступают напрямую в контроллер Pages. Первая строка URI с ЧПУ в метод view() контроллера News. $route['news/(:any)'] = 'news/view/$1'; Направьте ваш браузер в корень сайта, а затем в index.php/news и смотрите ваши страницы новостей. В итоге находясь в корне "новостей"(http://site/index.php/news), и щелкая по ссылке новости(http://site/index.php/news/s1), мы передаем в контроллер "news" переменную "s1" по которой отрабатывает public function view($slug), переменная s1 превращается в $slug, и т.к. мы прописали "роутинг" $route['news/(:any)'] = 'news/view/$1'; все отрабатывает, и выводит нам определенную новость с помощью странички "application/views/news/view.php"
Урок — создание новых элементов Теперь вы знаете, как вы можете считывать данные из базы данных, используя CodeIgniter, но вы еще не записали никакой информации в базу данных. В этом разделе вы расширите ваш контроллер новостей и модель, созданную ранее, чтобы включить эту функциональность. Создание формы Мы сделаем красивый URL из заголовка непосредственно в модели. Создайте новое отображение в application/views/news/create.php. <h2>Создание нового элемента</h2> <?php echo validation_errors(); ?> <?php echo form_open('news/create') ?> <label for="title">Title</label> <label for="text">Text</label> <input type="submit" name="submit" value="Create news item" /> </form> Здесь только две вещи, которые могут выглядеть незнакомо для вас: функции form_open() и validation_errors(). Первая функция предоставлена помощником форм, и генерирует элемент формы с дополнительной функциональностью, вроде добавления скрытого поля для предотвращения CSFR-атак. Последняя используется для вывода сообщений об ошибках при проверке данных из формы. Вернитесь к вашему контроллеру новостей(application/controllers/news.php). Здесь вы собираетесь сделать две вещи, убедиться в том, что форма передана, а также в том, что переданные данные прошли правила валидации. Вы будете использовать библиотеку валидации форм, чтобы сделать это. public function create() $data['title'] = 'Create a news item'; $this->form_validation->set_rules('title', 'title', 'required'); if ($this->form_validation->run() === FALSE) } Приведенный выше код добавляет много функциональности. Метод set_rules() принимает три аргумента: имя поля, имя, которое будет использовано в сообщениях об ошибках, и правило. В этом случае поля заголовка и текста являются обязательными. Продолжая, вы увидите условие, которое проверяет, успешно ли пройдена валидация формы. Если нет, форма отображается снова, если она была передана и выполнены все правила, вызывается модель. После этого, загружается файл отображения, чтобы показать сообщение об успехе. Создайте отображение в application/view/news/success.php и запишите в него сообщение об успехе. <?php Модель Вы будете использовать класс Active Record, чтобы вставить информацию и использовать библиотеку ввода, чтобы получить данные. Откройте модель(models/news_model.php), созданную ранее и добавьте в нее следующее: public function set_news() $slug = url_title($this->input->post('title'), 'dash', TRUE); $data = array( return $this->db->insert('news', $data); Этот новый метод заботится о вставке записи новости в базу данных. Третья строка содержит новую функцию url_title(). Эта функция предоставлена помощником URL, она обрезает переданную строку, заменяя все пробелы дефисами, и приводит все символы к нижнему регистру. Это создает хорошую строку, превосходную для создания URI. Давайте вернемся к подготовке записи перед тем, как она будет позже вставлена, в массиве $data. Каждый элемент соответствует столбцу в таблице базы данных, созданной ранее. Тут вы можете обратить внимание на новый метод, называемый post() из библиотеки ввода. Этот метод позволяет убедиться в том, что данные очищены, защищая вас от атак. Библиотека ввода загружается по умолчанию. Наконец, вы вставляете ваш массив $data в базу данных. Роутинг Теперь направьте ваш браузер на локальную среду разработки, где вы установили CodeIgniter, и добавьте index.php/news/create к URL. Поздравляем, вы только-что создали ваше первое приложение на CodeIgniter. Добавьте несколько новостей, и проверьте различные страницы, которые вы только-что сделали. Комментарии пользователей Эту новость ещё не комментировалиНаписать комментарий Анонимам нельзя оставоять комментарии, зарегистрируйтесь! |
Контакты Группа ВК | Код обмена баннерами | Видео к IT статьям на YoutubeВидео на другие темы Смотреть | |||
Мои друзья: | © Snakeproject.ru создан в 2013 году.При копировании материала с сайта - оставьте ссылку.Весь материал на сайте носит ознакомительный характер,за его использование другими людьми, автор ответственности не несет. |
||||
Поддержать автора и проект
|