Начало работы с PHP-фреймворком Phalcon
Phalcon – это PHP-фреймворк, основанный на архитектуре MVC (Model-View-Controller, модель-вид-контроллер), который предоставляет ряд довольно типичных функций: объектно-реляционное отображение (ORM), шаблонизатор, маршрутизация, кэширование, и т.д.
В предыдущем руководстве можно найти инструкции по установке Phalcon на виртуальный выделенный сервер Ubuntu 12.04. Также в нём показано, как создать и использовать первый контроллер. Данное руководство является продолжением; в нём речь пойдёт о создании остальных компонентов архитектуры c: видов и моделей.
Примечание: Чтобы следовать данному руководству, нужно сначала выполнить инструкции руководства «Установка и начало работы с Phalcon на сервере Ubuntu 12.04»
Виды
В предыдущем руководстве был создан стандартный контроллер IndexController с одним методом (IndexAction), который выполняет следующее действие:
echo "<h1>Hello World!</h1>";
Как вам известно, это далеко не лучший способ вывести контент на экран; как и другие PHP-фреймворки, Phalcon поставляется с шаблонизатором, который следует использовать в подобных ситуациях. Другими словами, на данном этапе можно создать вид и задать ему фразу Hello World в качестве переменной.
Для этого в каталоге app/views нужно создать ещё один каталог, назвать его именем контроллера, а затем создать в нём файл с именем метода контроллера. Создайте каталог:
mkdir /var/www/project_name/app/views/index
В этом каталоге нужно создать файл с расширением .phtml, названный именем метода контроллера:
nano /var/www/project_name/app/views/index/index.phtml
В данном файле вырежьте всё содержимое IndexAction и внесите в следующий код:
<?php echo “<h1>Hello World!</h1>”; ?>
Теперь строка выводится на экран благодаря соответствующему виду для этого контроллера и действия.
Теперь попробуйте объявить эту переменную в контроллере, а затем передать её для отображения.
Вернитесь в IndexController и вставьте следующий код в метод indexAction (убедитесь, что эта функция не содержит другого кода):
$string = "Hello World!";
$this->view->setVar("string", $string);
Первая строка задаёт текстовое значение переменной $string; вторая строка использует метод setVar метода view() родительского класса контроллера для передачи этой переменной одноимённой переменной вида.
Отредактируйте вид и замените код:
<?php echo "<h1>Hello World!</h1>"; ?>
строкой:
<h1><?php echo $string; ?></h1>
Браузер должен показать ту же самую строку. Теперь логика (строковое значение, которое создаётся или извлекается для разных целей) отделена от представления (html-тегов заголовка, в которые помещена строка в файле вида).
Модели и база данных
Теперь, когда контроллеры и виды готовы к работе, нужно подключить базу данных научиться взаимодействовать с ней при помощи моделей.
Примечание: Предполагается, что у вас уже есть готовая база данных MySQL, вы знаете ее учетные данные для доступа и знакомы с основными командами MySQL.
Чтобы подключить БД, нужно отредактировать файл для самозагрузки, созданный в предыдущем руководстве (это файл index.php в каталоге public/):
nano /var/www/project_name/public/index.php
Найдите блок:
//Setup a base URI so that all generated URIs include the "tutorial" folder
$di->set('url', function(){
$url = new \Phalcon\Mvc\Url();
$url->setBaseUri('/project/');
return $url;
});
И добавьте следующий блок:
//Setup the database service
$di->set('db', function(){
return new \Phalcon\Db\Adapter\Pdo\Mysql(array(
"host" => "localhost",
"username" => "root",
"password" => "password",
"dbname" => "db-name"
));
});
Примечание: Не забудьте указать свои сведения о БД.
Сохраните и закройте файл. Затем создайте таблицу для хранения первой модели. Для примера назовём её articles; эта тестовая БД содержит столбцы ID, title и body. Для создания этой таблицы используйте команду:
CREATE TABLE `articles` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`body` text NOT NULL,
PRIMARY KEY (`id`)
);
При помощи командной строки добавьте в БД строку данных:
INSERT INTO `articles` (title, body) VALUES ('This is the first article', 'some article body');
Теперь, когда в БД есть тестовые данные, определите модель Article. Создайте php-файл в каталоге app/models данного приложения:
nano /var/www/project_name/app/models/Articles.php
Вставьте в него следующий код (опустите закрывающий тег php):
<?php
class Articles extends \Phalcon\Mvc\Model {
}
Это расширит класс моделей Phalcon и предоставит множество полезных функций для взаимодействия с данными модели. Кроме того, база данных уже связана с классом, так как у них одинаковые названия. Потому данная модель будет ссылаться на эту таблицу базы данных.
Теперь нужно объявить свойства модели (что отображаются в столбцах таблицы). Добавьте в класс следующие свойства:
public $id;
public $title;
public $body;
Затем нужно установить setters/getters для извлечения или присвоения значений этим свойствам. Getters и setters позволяют полностью управлять способами доступа к этим данным и видимостью свойств. Но данное руководство не охватывает внесение данных в БД, потому нужно добавить всего одну функцию getter для извлечения данных из свойства. Добавьте ниже в класс модели следующие методы:
public function getId() {
return $this->id;
}
public function getTitle() {
return $this->title;
}
public function getBody() {
return $this->body;
}
Как правило, при этом нужно также задать функцию setter. Сохраните этот файл и вернитесь в IndexController. Замените содержимое IndexAction следующим кодом:
$article = Articles::findFirst(1);
$this->view->setVar(“string”, $article->getTitle());
В первой строке используется метод findFirst класса модели Phalcon, который был расширен моделью Articles, для извлечения статьи с ID 1. Вторая строка передаёт виду значение столбца title, извлекаемое функцией getter, объявленной в модели. Сохраните файл и обновите браузер. На странице должен появиться заголовок первой статьи.
К сожалению, охватить все функции Phalcon в рамках одного руководства невозможно. Дополнительную информацию о работе фреймворка Phalcon можно найти здесь.
Tags: Phalcon, PHP, Ubuntu 12.04