Начало работы с 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: , ,

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