Создание и запуск проекта Symfony
Что такое Symfony?
Symfony — это открытый фреймворк PHP для веб-разработки, созданный компанией SensioLabs, предназначенный для предоставления набора эффективных, гибких и мощных инструментов разработчикам для создания современных веб-приложений. Symfony предлагает множество функций, таких как маршрутизация, шаблонный движок, обработка форм, аутентификация и т.д., упрощая выполнение общих задач веб-разработки.
Основные характеристики и преимущества Symfony
- Модульный дизайн: Symfony использует модульный подход, позволяя разработчикам выбирать и использовать компоненты по мере необходимости.
- Высокая производительность: Благодаря оптимизированной архитектуре и механизмам кэширования, Symfony обеспечивает высокую производительность.
- Мощная поддержка сообщества: Имеет большую разработческую сообщество и богатую экосистему.
- Гибкость: Возможна интеграция с различными сторонними библиотеками и расширениями, подходит для проектов любого масштаба.
- Хорошая документация: Обеспечивает полную документацию и учебные материалы, помогающие разработчикам быстро начать работу.
Symfony помогает разработчикам быстро создавать качественные веб-приложения и API, подходящие как для небольших, так и для крупных корпоративных систем.
Создание и запуск проекта Symfony с использованием ServBay
В этой статье мы воспользуемся PHP-средой, предоставляемой ServBay, чтобы создать и запустить проект Symfony. Мы будем использовать функционал "Хост" сервиса ServBay, чтобы настроить веб-сервер и упростить доступ к проекту через простую конфигурацию.
Внимание: Если вы ранее использовали NGINX или Apache
По умолчанию ServBay использует Caddy в качестве веб-сервера. Для пользователей, мигрирующих с NGINX и Apache на ServBay, необходимо учесть некоторые ключевые изменения:
Настройка Caddy
В ServBay уже встроен Caddy, и он оптимизирован и отлажен по умолчанию. Разработчикам нужно лишь управлять сайтами через функционал "Хост" в ServBay, без необходимости ручной настройки конфигурационных файлов Caddy.
Правила переписывания и .htaccess
В NGINX и Apache разработчики обычно сами пишут правила переписывания и файлы .htaccess для обработки перенаправлений URL и других конфигураций. Однако, для Caddy правила уже настроены по умолчанию в ServBay, поэтому, если нет особых требований, разработчикам не нужно писать эти правила самостоятельно.
Узнать больше
Для получения дополнительной информации, пожалуйста, ознакомьтесь с Rewrite и htaccess, Как мигрировать сайт с Apache на ServBay, Как мигрировать сайт с NGINX на ServBay.
Создание проекта Symfony
TIP
ServBay рекомендует размещать сайт в каталоге /Applications/ServBay/www
для удобства управления.
Установка Composer
В ServBay уже предустановлен Composer, поэтому отдельная установка не требуется.
Создание проекта Symfony
С помощью Composer создайте новый проект Symfony:
bashcd /Applications/ServBay/www mkdir servbay-symfony-app cd servbay-symfony-app composer create-project symfony/website-skeleton .
1
2
3
4Переход в каталог проекта
Перейдите в каталог нового проекта Symfony:
bashcd /Applications/ServBay/www/servbay-symfony-app
1
Инициализация конфигурации
Настройка переменных среды
Настройте информацию о подключении к базе данных и другие переменные среды в файле
.env
. Убедитесь, что следующие настройки указаны правильно:APP_ENV=dev APP_SECRET=your_secret_key DATABASE_URL=mysql://root:[email protected]:3306/servbay_symfony_app
1
2
3
Настройка веб-сервера
Используйте функционал "Хост" в ServBay, чтобы получить доступ к проекту Symfony через веб-сервер. В настройках "Хост" в ServBay добавьте новый сайт:
- Имя:
My First Symfony Dev Site
- Домен:
servbay-symfony-test.local
- Тип сайта:
PHP
- Версия PHP:
8.3
- Корневая директория сайта:
/Applications/ServBay/www/servbay-symfony-app/public
Подробные настройки см. в добавление первого сайта.
Добавление примера кода
Добавьте следующий код в файл config/routes.yaml
для вывода "Hello ServBay!":
index:
path: /
controller: App\Controller\DefaultController::index
2
3
Добавьте следующий код в файл src/Controller/DefaultController.php
:
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class DefaultController
{
/**
* @Route("/", name="index")
*/
public function index(): Response
{
return new Response('Hello ServBay!');
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Доступ к сайту
Откройте браузер и перейдите по адресу https://servbay-symfony-test.local
, вы увидите вывод Hello ServBay!
.
Пример NoSQL-базы данных
Пример с Memcached
Установка расширения Memcached
В ServBay расширение Memcached уже предустановлено, дополнительная установка не требуется.
Настройка Memcached
Настройте информацию о подключении к Memcached в файле
.env
:CACHE_DRIVER=memcached MEMCACHED_HOST=127.0.0.1
1
2Добавьте следующий код в файл
config/routes.yaml
:
memcached:
path: /memcached
controller: App\Controller\DefaultController::memcached
2
3
Использование Memcached
Используйте кеширование в контроллере:
phpuse Symfony\Component\Cache\Adapter\MemcachedAdapter; class DefaultController { /** * @Route("/memcached", name="memcached") */ public function memcached(): Response { $client = MemcachedAdapter::createConnection('memcached://127.0.0.1:11211'); $cache = new MemcachedAdapter($client); $cacheItem = $cache->getItem('my_cache_key'); if (!$cacheItem->isHit()) { $cacheItem->set('Hello Memcached!'); $cache->save($cacheItem); } return new Response($cacheItem->get()); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Откройте браузер и перейдите по адресу
https://servbay-symfony-test.local/memcached
Пример с Redis
Установка расширения Redis
В ServBay расширение Redis уже предустановлено, дополнительная установка не требуется.
Настройка Redis
Настройте информацию о подключении к Redis в файле
.env
:REDIS_URL=redis://127.0.0.1:6379
1Добавьте следующий код в файл
config/routes.yaml
:
redis:
path: /redis
controller: App\Controller\DefaultController::redis
2
3
Использование Redis
Используйте кеширование в контроллере:
phpuse Symfony\Component\Cache\Adapter\RedisAdapter; class DefaultController { /** * @Route("/redis", name="redis") */ public function redis(): Response { $redisConnection = RedisAdapter::createConnection('redis://127.0.0.1:6379'); $cache = new RedisAdapter($redisConnection); $cacheItem = $cache->getItem('my_cache_key'); if (!$cacheItem->isHit()) { $cacheItem->set('Hello Redis!'); $cache->save($cacheItem); } return new Response($cacheItem->get()); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Откройте браузер и перейдите по адресу
https://servbay-symfony-test.local/redis
Пример реляционной базы данных
Создание структуры базы данных и файлов миграции
Создание файла миграции
Используйте Symfony Maker Bundle для создания файла миграции:
bashphp bin/console make:migration
1Редактирование файла миграции
Найдите новый файл миграции в каталоге
src/Migrations
и отредактируйте его для определения структуры базы данных:phppublic function up(Schema $schema): void { $this->addSql('CREATE TABLE users (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, PRIMARY KEY(id))'); }
1
2
3
4Запуск миграции
Используйте команду Symfony для запуска миграции и создания таблиц базы данных:
bashphp bin/console doctrine:migrations:migrate
1
Пример с MySQL
Настройка MySQL
Настройте информацию о подключении к MySQL в файле
.env
:DATABASE_URL=mysql://root:[email protected]:3306/servbay_symfony_app
1Добавьте следующий код в файл
config/routes.yaml
:
mysql_add:
path: /mysql-add
controller: App\Controller\DefaultController::mysqlAdd
mysql_get:
path: /mysql
controller: App\Controller\DefaultController::mysql
2
3
4
5
6
Запись данных пользователя
Запишите данные пользователя в контроллере:
phpuse Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\Routing\Annotation\Route; class DefaultController { private $entityManager; public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/mysql-add", name="mysql_add") */ public function mysqlAdd(): Response { $user = new User(); $user->setName('ServBay'); $user->setEmail('[email protected]'); $this->entityManager->persist($user); $this->entityManager->flush(); return new Response('User added'); } /** * @Route("/mysql", name="mysql") */ public function mysql(): Response { $users = $this->entityManager->getRepository(User::class)->findAll(); return new Response(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Откройте браузер и перейдите по адресам
https://servbay-symfony-test.local/mysql-add
иhttps://servbay-symfony-test.local/mysql
Пример с PostgreSQL
Настройка PostgreSQL
Настройте информацию о подключении к PostgreSQL в файле
.env
:DATABASE_URL=pgsql://root:[email protected]:5432/servbay_symfony_app
1Добавьте следующий код в файл
config/routes.yaml
:
pgsql_add:
path: /pgsql-add
controller: App\Controller\DefaultController::pgsqlAdd
pgsql_get:
path: /pgsql
controller: App\Controller\DefaultController::pgsql
2
3
4
5
6
Запись данных пользователя
Запишите данные пользователя в контроллере:
phpuse Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\Routing\Annotation\Route; class DefaultController { private $entityManager; public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/pgsql-add", name="pgsql_add") */ public function pgsqlAdd(): Response { $user = new User(); $user->setName('ServBay'); $user->setEmail('[email protected]'); $this->entityManager->persist($user); $this->entityManager->flush(); return new Response('User added'); } /** * @Route("/pgsql", name="pgsql") */ public function pgsql(): Response { $users = $this->entityManager->getRepository(User::class)->findAll(); return new Response(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Откройте браузер и перейдите по адресам
https://servbay-symfony-test.local/pgsql-add
иhttps://servbay-symfony-test.local/pgsql
Выполнив эти шаги, вы успешно создали и запустили проект Symfony, использовали функции, предоставляемые ServBay, для управления и доступа к проекту, а также подключили несколько баз данных и выполнили операции с данными.