Разработка приложений при помощи фреймворка Lithium

Lithium – это полноценный PHP-фреймворк для создания веб-приложений. Основанный на архитектуре MVC (Model-View-Controller, модель-вид-контроллер), он использует PHP 5.3+ и взаимодействует с новейшими технологиями хранения данных (например, MongoDB и CouchDB). Lithium отлично подходит как для организации масштабных проектов, так и для кодирования вне фреймворка при разработке собственного уникального приложения. Кроме того, Lithium оборудован надежной системой плагинов, которая позволяет использовать компоненты, которые не входят в данный фреймворк (например, Twig для создания шаблонов или Doctrine2 для ORM).

Данное руководство является продолжением статьи «Установка и использование Lithium на сервере Ubuntu 12.04», в которой рассказано о подготовке окружения для разработки веб-приложения. Также в этой статье была подключена БД MySQL и разработана простая страница «Hello World». В данном руководстве речь пойдет об использовании компонентов шаблона MVC.

Контроллер

В предыдущей статье уже была показана работа простого класса контроллера и его стандартного метода. Используйте его для тестирования других возможностей MVC, среди которых:

  • Использование других методов контроллера и их отношение к вызываемым в браузере URL-адресам;
  • Отображение информации, полученной от контроллера, в представлении (или виде);
  • Создание модели для представления данных в БД.

Маршрутизация

Чтобы посмотреть, как контроллер отображает URL, который нужно открыть в браузере, создайте новый метод в контроллере HelloController:

public function goodbye() {
echo "Goodbye!";
}

Теперь направьте браузер на your-ip/sites/hello/goodbye, и на экране появится сообщение «Goodbye!». Это стандартное поведение маршрутизации Lithium, при котором первый параметр url-а – имя контроллера (в данном случае это Hello, без части «Controller»), а второй – имя метода (goodbye). Можно даже задать параметр для метода:

public function goodbye($name) {
echo "Goodbye " . $name . '!';
}

Если направить браузер на your-ip/sites/hello/goodbye/danny, то на экране появится сообщение «Goodbye danny!». Это удобно и просто, и работает подобно CodeIgniter.

Конечно, несмотря на все преимущества, эта функции не может удовлетворить потребности всех проектов. В таком случае можно определить пользовательские правила маршрутизации и отображения URL-адресов.

Примечание: Более подробную информацию по этому вопросу можно найти в документации Lithium.

Виды

Как говорилось ранее, архитектура MVC способствует разделению логики и представления; теперь можно посмотреть, как Lithium использует виды для отображения информации, указанной в классе HelloController. Возвращаясь к методу goodbye(), который был создан ранее, предположим, что его параметр ($name) нужно отобразить в представлении (или виде).

Для начала нужно, чтобы метод передал переменную в вид. Это можно сделать путем возвращения ассоциативного массива ключей и значений. Итак, отредактируйте метод goodbye() следующим образом:

public function goodbye($name) {
return array(
'name' => $name,
);
}

Как видите, метод возвращает массив, содержащий переменную (полученную из URL-а).

Ключ, который соотносится с переменной $name, будет доступен в представлении для вывода в качестве переменной.

Теперь создайте в папке app/views/ файл вида с тем же именем, что и у метода контроллера, и поместите его в папке с именем контроллера. Таким образом, в данном случае это будет выглядеть так (в root-папке проекта):

nano app/views/hello/goodbye.html.php

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

<h1>Goodbye <?=$name;?>!</h1>

Теперь откройте url:

your-ip/sites/hello/goodbye/danny

Теперь между тегами заголовков можно увидеть, как переменная $name, полученная из контроллера, была передана и выведена видом. Еще одна удобная функция автоматизации Lithium.

Также стоит обратить внимание, что виды встраиваются в существующий макет, который поставляется с Lithium по умолчанию (с небольшим меню в верхней части).

Примечание: За более подробной информацией обратитесь к документации Lithium.

Модели

Ознакомившись с маршрутизацией запросов и отображением информации, рассмотрим, как модели извлекают информацию из БД.

Для начала нужно убедиться, что в проекте существует БД и таблица. В данном руководстве используется таблица news, разделенная на три столбца (id, title и body); заполните таблицу любыми данными, чтобы при тестировании на экране появился какой-нибудь контент.

Примечание: Более подробную информацию по работе с MySQL можно найти в этой статье; однако имейте в виду, Lithium позволяет использовать и другие СУБД.

Чтобы быстро создать таблицу, можно запустить в командной строке следующее, войдя на сервер MySQL:

CREATE TABLE `news` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`body` text NOT NULL,
PRIMARY KEY (`id`)
);

Внесите в таблицу пару строк с условными новостями:

INSERT INTO `news` (title, body)  VALUES ('This is the first news article', 'some article body');
INSERT INTO `news` (title, body)  VALUES ('This is other news', 'some more article body');

Итак, теперь, когда в таблице появился какой-то контент, создайте файл News.php, который будет содержать класс модели, в папке app/models/:

nano app/models/News.php

Внесите в него следующее:

<?php

namespace app\models;

class News extends \lithium\data\Model {
}
?>

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

Вернитесь к классу HelloController и добавьте следующую строку над объявлением класса:

use app\models\News;

Теперь добавьте в класс новый метод:

public function news($id) {
$news = News::first(array(
'conditions' => array('id' => $id)
));
return array(
'news' => $news->data()
);
}

Этот метод находит параметр URL-а (в данном случае – id), извлекает соответствующие данные и передаёт результат виду. Он использует базовый класс модели Lithium для создания запроса при помощи метода find(), после чего данные извлекаются при помощи метода data(). Создайте вид для отображения данных таблицы news:

nano app/views/hello/news.html.php

Внесите в него следующее:

<h1><?=$news['title'];?></h1>
<p><?=$news['body'];?></p>

Прежде чем вносить эти изменения, убедитесь, что конфигурационный файл содержит правильные учетные данные MySQL:

nano /var/www/site/app/config/bootstrap/connections.php

Как видите, переменная $news – это массив ключей, имена которых соответствуют именам столбцов таблицы. Теперь направьте браузер на адрес:

your-ip/site/hello/news/1

На экране должна появиться первая статья. Измените 1 в конце адреса на 2, и тогда на экран будет выведена вторая статья, и т.д.

Примечание: Более подробную информацию можно найти в документации фреймворка.

Заключение

Данное руководство знакомит с компонентами архитектуры Lithium, с базовым поведением механизма маршрутизации и со способами перевода URL-адреса в запрос контроллера. Конечно, руководство охватывает только основы работы с Lithium, но этой информации хватит для того, чтобы начать разработку собственного приложения.

Tags: , , ,

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