Разработка простого приложения CodeIgniter

Published by Leave your thoughts

CodeIgniter – это мощный PHP-фреймворк, способный значительно ускорить разработку веб-приложения. Его работа не требует больших ресурсных затрат благодаря модульному принципу загрузки библиотек и разделению логики и представления при помощи архитектуры MVC (Model-View-Controller, «модель-вид-контроллер»).

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

Обратите внимание: предполагается, что CodeIgniter установлен и настроен согласно первому руководству серии.

Это руководство продемонстрирует использование некоторых классов и функций CodeIgniter на примере отправки запроса таблице базы данных, содержащей  новости, которые нужно отобразить на отдельных страницах.

Для этого понадобится создать контроллер, модель и вид, а также базу данных для хранения информации

Примечание: предполагается, что база данных MySQL уже установлена на сервер.

Руководство имеет к БД следующие требования: она должна содержать таблицу по имени news, в которой должно быть 3 столбца по имени id, title и body. Конечно, необязательно ограничиваться тремя столбцами, но для выполнения данного руководства этого хватит. Кроме того, в таблице нужно создать пару строк, содержащих какие-либо новости.

Не забудьте проверить, настроено ли взаимодействие CodeIgniter с БД.

Модель

Итак, выполнив все предварительные требования, приступайте к разработке модели, которая будет запрашивать информацию из БД. Перейдите в папку application/models установки CodeIgniter и создайте новый php-файл по имени news_model.php (в целом, его можно назвать как угодно). Добавьте открывающий тег php в начало файла и создайте класс модели путем расширения стандартного класса CI (помните, что имена классов начинаются с заглавной буквы):

class News_model extends CI_Model {
}

В этом классе нужно создать функцию (которая также называется методом) для запроса к БД. CodeIgniter использует шаблон Active Record, который позволяет очень быстро создать такую функцию. Все, что нужно сделать – загрузить класс БД в функцию-конструктор. Чтобы сделать это, вставьте следующую функцию в класс:

public function __construct()    {
$this->load->database();
}

Теперь все методы в этом классе смогут использовать функции БД. Затем нужно сделать так, чтобы вышеупомянутый метод в классе Model читал информацию из таблицы базы данных:

public function get_news($id) {
if($id != FALSE) {
$query = $this->db->get_where('news', array('id' => $id));
return $query->row_array();
}
else {
return FALSE;
}
}

Эта функция просто проверяет, был ли передан идентификатор, прежде чем извлекать из таблицы news строку с ID нужной новости и возвращать ее в качестве ассоциативного массива, содержащего все столбцы в таблице. Если идентификатор не был передан, функция вернет FALSE. Проще говоря, она отвечает за извлечение информации. Сохраните и закройте файл.

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

Контроллер

Перейдите в папку application/controllers и создайте новый файл php по имени news.php (имя этого файла должно совпадать с именем класса). В этом файле снова откройте тэг php и создайте класс контроллера:

class News extends CI_Controller {
}

Теперь нужно выполнить несколько действий в этом классе, чтобы запросы обрабатывались должным образом, а на экране появлялась нужная информация. В целом, вся самая тяжелая работа выполняется в классе модели; в классе контроллера нужно загрузить класс модели и передать его аргументу ID нужной новости. Итак, создайте функцию по имени show():

public function show($id) {
$this->load->model('news_model');
$news = $this->news_model->get_news($id);
$data['title'] = $news['title'];
$data['body'] = $news['body'];
$this->load->view('news_article', $data);
}

Этот метод выполняет следующее:

  • первая строка загружает только что созданную модель news_model;
  • вторая строка использует эту модель и хранит результат запроса (ассоциативный массив, содержащий все столбцы в строке) в переменной $news;
  • третья и четвертая строки хранят в массиве $data заголовок и тело извлеченных данных;
  • пятая строка загружает вид для отображения данных и передает его.

Каждое значение в массиве $data представляет переменную для вывода в файле вида. Давайте рассмотрим его подробнее.

Вид

Перейдите в папку application/views и создайте файл php по имени news_article.php.

Имейте в виду: имя этого файла должно совпадать с именем, указанным в контроллере; также стоит помнить, что в контроллер не нужно вносить расширение файла.

В этот файл внесите следующие строки:

<?php print $title; ?>
<?php print $body; ?>

Как видите, переменные $title и $body должны передаваться виду из контроллера через массив $data.

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

http://example.com/news/show/1

Если все было выполнено правильно, CodeIgniter будет искать контроллер по имени news (в классе файлов news.php), вызовет метод show() и передаст ему параметр 1. Этот метод загрузит модель news_model, которая запрашивает БД и возвращает полученные данные контроллеру, который передает их виду для отображения. Очень просто и логично. Если перейти по:

http://example.com/news/show/2

на экране появится новость с ID 2.

Базовое, но весьма динамичное приложение, которое может запрашивать информацию из БД и отображать ее на клиенте, готово! Преимущества CodeIgniter очевидны даже на таком простом примере. Просто представьте разработку более сложного приложения без CodeIgniter – огромное количество задач разработчику придется выполнять вручную.

Tags: , , , , , ,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>