Создание и запуск проекта на Phalcon
Что такое Phalcon?
Phalcon — это высокопроизводительный PHP-фреймворк, реализованный в виде расширения на языке C, что обеспечивает высокую эффективность выполнения. Он использует архитектуру MVC (модель-представление-контроллер) и нацелен на быстрое и гибкое программирование, сохраняя при этом высокую производительность.
Основные особенности и преимущества Phalcon
- Высокая производительность: Благодаря реализации на языке C, Phalcon обеспечивает превосходную производительность.
- Богатый функционал: Включает ORM, шаблонизатор, маршрутизацию, кэширование, очереди и другие возможности, удовлетворяющие различным потребностям разработки.
- Низкое потребление памяти: Благодаря уникальной реализации, Phalcon потребляет очень мало памяти во время выполнения.
- Простота использования: Предоставляет простой и удобный API и четкую документацию, помогающую быстро освоиться.
- Модульная конструкция: Можно выбирать и использовать разные компоненты в зависимости от необходимости, обеспечивая высокую гибкость.
Phalcon — идеальный выбор для создания высокопроизводительных веб-приложений и API, подходящих для проектов различного масштаба, от малых приложений до крупных корпоративных систем.
Создание и запуск проекта на Phalcon с использованием ServBay
В этой статье мы будем использовать PHP-среду, предоставляемую ServBay, для создания и запуска проекта на Phalcon. Мы настроим веб-сервер с помощью функции «Хост» в ServBay и с помощью простой конфигурации добьемся доступа к проекту.
Важно: если вы ранее использовали NGINX или Apache
ServBay по умолчанию использует Caddy в качестве веб-сервера. При переходе на ServBay с NGINX или Apache следует обратить внимание на несколько ключевых моментов:
Конфигурация Caddy
В ServBay уже встроен Caddy и его конфигурация оптимизирована и настроена. Разработчикам нужно только управлять сайтами через функцию «Хост» в ServBay, без ручного редактирования конфигурационных файлов Caddy.
Правила переписывания и .htaccess
В NGINX и Apache разработчики обычно сами пишут правила переписывания и файлы .htaccess для обработки переписывания URL и других настроек. Однако в ServBay конфигурация Caddy уже настроена, поэтому если нет особых требований, разработчикам не нужно писать их самостоятельно.
Узнать больше
Более подробную информацию можно найти в разделах Rewrite и htaccess, Как перенести сайт с Apache на ServBay, Как перенести сайт с NGINX на ServBay.
Важно: активация модуля Phalcon
В ServBay уже встроен модуль Phalcon, пользователям нужно только активировать его и перезапустить PHP. Подробности о том, как активировать встроенный в ServBay модуль Phalcon, см. в статье Как включить модуль Phalcon в ServBay.
Разные версии Phalcon и DevTools
В зависимости от версии PHP нужно установить соответствующую версию Phalcon DevTools:
- PHP 5.6, 7.0, 7.1: Phalcon 3.4.5
- Соответствующая версия Phalcon DevTools:
3.4.x
- Соответствующая версия Phalcon DevTools:
- PHP 7.2, 7.3, 7.4: Phalcon 4.1.2
- Соответствующая версия Phalcon DevTools:
4.3.x
- Соответствующая версия Phalcon DevTools:
- PHP 8.0, 8.1, 8.2, 8.3, 8.4: Phalcon 5.7.0
- Соответствующая версия Phalcon DevTools:
5.0.x
(из-за проблем с официальной поддержкой DevTools для PHP 8.x, рекомендуется использовать исправленную версию)
- Соответствующая версия Phalcon DevTools:
Создание проекта на Phalcon
TIP
ServBay рекомендует разработчикам размещать сайты в каталоге /Applications/ServBay/www
для удобства управления.
Установка Composer
Composer уже установлен в ServBay, дополнительная установка не требуется.
Создание каталога проекта
Создайте каталог проекта и перейдите в него:
bashcd /Applications/ServBay/www mkdir servbay-phalcon-app cd servbay-phalcon-app
1
2
3Установка Phalcon DevTools
Установите соответствующую версию Phalcon DevTools в зависимости от версии PHP:
PHP 5.6, 7.0, 7.1:
bashcomposer require phalcon/devtools:"^3.4"
1PHP 7.2, 7.3, 7.4:
bashcomposer require phalcon/devtools:"~4.1"
1PHP 8.0, 8.1, 8.2, 8.3, 8.4:
Создайте файл
composer.json
и добавьте в него следующий контент:json1
{ "repositories": [ { "url": "https://github.com/daleffe/phalcon-devtools-5.x-fixed.git", "type": "git" } ], "require": { "phalcon/devtools": "dev-master" }, "minimum-stability": "dev", "prefer-stable": true }
Затем выполните команду:
```bash
composer update
2
3
4
Создание проекта на Phalcon
Создайте проект на Phalcon с использованием Phalcon DevTools:
bashvendor/bin/phalcon project servbay-phalcon-app
1Переход в каталог проекта
Перейдите в каталог созданного проекта на Phalcon:
bashcd servbay-phalcon-app
1
Инициализация конфигурации
Настройка переменных окружения
В файле
app/config/config.php
настройте информацию о подключении к базе данных и другие переменные окружения. Убедитесь, что следующие настройки верны:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], ]);
1
2
3
4
5
6
7
8
9
Настройка веб-сервера
Используйте функцию «Хост» в ServBay для доступа к проекту Phalcon через веб-сервер. В настройках «Хост» в ServBay добавьте новый хост:
- Имя:
My First Phalcon Dev Site
- Домен:
servbay-phalcon-test.local
- Тип сайта:
PHP
- Версия PHP: выберите соответствующую версию PHP
- Корневой каталог сайта:
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/public
Подробные шаги настройки см. в разделе Добавление первого сайта.
Добавление примера кода
Добавьте следующий код в файл app/config/routes.php
, чтобы вывести "Hello ServBay!":
$router->add(
'/',
[
'controller' => 'index',
'action' => 'index',
]
);
2
3
4
5
6
7
Добавьте следующий код в файл app/controllers/IndexController.php
:
namespace App\Controllers;
use Phalcon\Mvc\Controller;
class IndexController extends Controller
{
public function indexAction()
{
echo 'Hello ServBay!';
}
}
2
3
4
5
6
7
8
9
10
11
Доступ к сайту
Откройте браузер и перейдите по адресу https://servbay-phalcon-test.local
, на странице вы увидите вывод Hello ServBay!
.
Пример базы данных NoSQL
Пример с Memcached
Установка расширения Memcached
Расширение Memcached уже предустановлено в ServBay, дополнительная установка не требуется.
Настройка Memcached
Добавьте информацию о подключении Memcached в файл
app/config/config.php
:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], 'cache' => [ 'adapter' => 'Memcached', 'host' => '127.0.0.1', 'port' => 11211, ], ]);
1
2
3
4
5
6
7
8
9
10
11
12
13
14Настройка маршрутов
Добавьте следующий код в файл
app/config/routes.php
:php$router->add( '/memcached', [ 'controller' => 'index', 'action' => 'memcached', ] );
1
2
3
4
5
6
7Использование Memcached
Используйте кэш в контроллере:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Cache\Backend\Memcached; use Phalcon\Cache\Frontend\Data as FrontData; class IndexController extends Controller { public function memcachedAction() { $frontCache = new FrontData([ 'lifetime' => 86400 ]); $cache = new Memcached($frontCache, [ 'host' => '127.0.0.1', 'port' => 11211, ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->get($cacheKey); if ($cachedData === null) { $cachedData = 'Hello Memcached!'; $cache->save($cacheKey, $cachedData); } echo $cachedData; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30Откройте браузер и перейдите по адресу
https://servbay-phalcon-test.local/memcached
Пример с Redis
Установка расширения Redis
Расширение Redis уже предустановлено в ServBay, дополнительная установка не требуется.
Настройка Redis
Добавьте информацию о подключении Redis в файл
app/config/config.php
:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], 'cache' => [ 'adapter' => 'Redis', 'host' => '127.0.0.1', 'port' => 6379, ], ]);
1
2
3
4
5
6
7
8
9
10
11
12
13
14Настройка маршрутов
Добавьте следующий код в файл
app/config/routes.php
:php$router->add( '/redis', [ 'controller' => 'index', 'action' => 'redis', ] );
1
2
3
4
5
6
7Использование Redis
Используйте кэш в контроллере:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Cache\Backend\Redis; use Phalcon\Cache\Frontend\Data as FrontData; class IndexController extends Controller { public function redisAction() { $frontCache = new FrontData([ 'lifetime' => 86400 ]); $cache = new Redis($frontCache, [ 'host' => '127.0.0.1', 'port' => 6379, ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->get($cacheKey); if ($cachedData === null) { $cachedData = 'Hello Redis!'; $cache->save($cacheKey, $cachedData); } echo $cachedData; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30Откройте браузер и перейдите по адресу
https://servbay-phalcon-test.local/redis
Пример с реляционной базой данных
Создание структуры базы данных и миграционных файлов
Создание миграционных файлов
Создайте миграционные файлы с помощью Phalcon DevTools:
bashvendor/bin/phalcon migration generate --directory=servbay-phalcon-app
1Редактирование миграционных файлов
В каталоге
migrations
создайте новый миграционный файл и отредактируйте его для определения структуры таблицы базы данных:phpuse Phalcon\Db\Column; use Phalcon\Db\Index; use Phalcon\Migrations\Mvc\Model\Migration; class UsersMigration_100 extends Migration { public function morph() { $this->morphTable('users', [ 'columns' => [ new Column( 'id', [ 'type' => Column::TYPE_INTEGER, 'autoIncrement' => true, 'notNull' => true, 'primary' => true, ] ), new Column( 'name', [ 'type' => Column::TYPE_VARCHAR, 'size' => 255, 'notNull' => true, ] ), new Column( 'email', [ 'type' => Column::TYPE_VARCHAR, 'size' => 255, 'notNull' => true, 'unique' => true, ] ), ], 'indexes' => [ new Index('PRIMARY', ['id'], 'PRIMARY'), new Index('email_UNIQUE', ['email'], 'UNIQUE'), ], ]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44Выполнение миграции
Используйте команду Phalcon DevTools для выполнения миграции и создания таблицы базы данных:
bashvendor/bin/phalcon migration run --directory=servbay-phalcon-app
1
Пример с MySQL
Настройка MySQL
Настройте информацию о подключении MySQL в файле
app/config/config.php
:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], ]);
1
2
3
4
5
6
7
8
9Настройка маршрутов
Добавьте следующий код в файл
app/config/routes.php
:php$router->add( '/mysql-add', [ 'controller' => 'index', 'action' => 'mysqlAdd', ] ); $router->add( '/mysql', [ 'controller' => 'index', 'action' => 'mysql', ] );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Добавление пользовательских данных
Добавьте пользовательские данные в контроллере:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Mysql; class IndexController extends Controller { public function mysqlAddAction() { $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ]); $success = $connection->insert( 'users', ['ServBay', '[email protected]'], ['name', 'email'] ); echo $success ? 'User added' : 'Failed to add user'; } public function mysqlAction() { $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ]); $users = $connection->fetchAll('SELECT * FROM users', \Phalcon\Db\Enum::FETCH_ASSOC); echo json_encode($users); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39Откройте браузер и перейдите по адресам
https://servbay-phalcon-test.local/mysql-add
иhttps://servbay-phalcon-test.local/mysql
.
Пример с PostgreSQL
Настройка PostgreSQL
Настройте информацию о подключении PostgreSQL в файле
app/config/config.php
:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Postgresql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], ]);
1
2
3
4
5
6
7
8
9Настройка маршрутов
Добавьте следующий код в файл
app/config/routes.php
:php$router->add( '/pgsql-add', [ 'controller' => 'index', 'action' => 'pgsqlAdd', ] ); $router->add( '/pgsql', [ 'controller' => 'index', 'action' => 'pgsql', ] );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Добавление пользовательских данных
Добавьте пользовательские данные в контроллере:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Postgresql; class IndexController extends Controller { public function pgsqlAddAction() { $connection = new Postgresql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ]); $success = $connection->insert( 'users', ['ServBay', 'demo@
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19