Загальна картина
Дата оновлення перекладу 2025-01-15
Загальна картина
Почніть використовувати Symfony за 10 хвилин! Правда! Це весь час, який вам знадобиться, щоб зрозуміти найважливіші концепти та почати розробку справжнього проекту!
Якщо ви використовувати веб-фреймворк раніше, то ви маєте почувати себе як вдома, використовуючи Symfony. Якщо ж ні, то ласкаво просимо до нового способу розробки веб-додатків. Symfony охоплює кращі практики, має зворотню сумісність (Так! Оновлюватися завжди легко та безпечно!) та пропонує довгострокову підтримку.
Завантаження Symfony
Для початку, переконайтеся, що ви встановили Composer і маєте версію PHP 7.1.3 або новіше.
Готові? У терміналі виконайте:
1
$ composer create-project symfony/skeleton quick_tour
Це створює новий каталог quick_tour/
з маленьким, але потужним, новим
додатком Symfony:
1 2 3 4 5 6 7 8 9 10 11
quick_tour/
├─ .env
├─ bin/console
├─ composer.json
├─ composer.lock
├─ config/
├─ public/index.php
├─ src/
├─ symfony.lock
├─ var/
└─ vendor/
Чи можемо ми вже завантажити проект у браузері? Звичайно! Ви можете встановити
Nginx або Apache та сконфігурувати їх
кореневим документом каталог public/
. Але для розробки краще
встановити локальний веб-сервер Symfony та
запустити його таким чином:
1
$ symfony server:start
Спробуйте ваш новий додатокн за посиланням http://localhost:8000
у браузері!

Основи: Маршрут, Контролер, Відповідь
У нашому проекті є всього близько 15 файлів, але він вже став елегантним API, розкішним веб-додатком або мікросервісом. Symfony починається з малого, але зростає разом з вами.
Але перед тим, як ми зайдемо занадто далеко, давайте зануримося в основи, побудувавши нашу першу сторінку.
У src/Controller
, створіть новий клас DefaultController
і всередині нього
метод index
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
// src/Controller/DefaultController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class DefaultController
{
#[Route('/', name: 'index')]
public function index(): Response
{
return new Response('Hello!');
}
}
Ось і все! Спробуйте зайти на домашню сторінку: http://localhost:8000/
. Symfony
бачить, що URL співпадає з нашим маршрутом, і виконує новий метод index()
.
Контролер - це звичайна функція з одним правилом: вона має повертати об'єкт Symfony
Response
. Але ця відповідь може містити що завгодно: простий текст, JSON або повну
сторінку HTML.
Але система маршрутизації набагато потужніша. Так що давайте зробимо маршрут більш цікавим:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// src/Controller/DefaultController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class DefaultController
{
- #[Route('/', name: 'index')]
+ #[Route('/hello/{name}', name: 'index')]
public function index(): Response
{
return new Response('Hello!');
}
}
URL до цієї сторінки змінився: тепер він /hello/*
: {name}
діє як підстановний
символ, який співпадає з чим завгодно. Все стає ще кращим! Оновіть ще й контролер:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
<?php
// src/Controller/DefaultController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class DefaultController
{
#[Route('/hello/{name}', name: 'index')]
- public function index()
+ public function index(string $name): Response
{
- return new Response('Hello!');
+ return new Response("Hello $name!");
}
}
Спробуйте цю сторінку за посиланням http://localhost:8000/hello/Symfony
. Ви маєте
побачити: Привіт, Symfony! Значення {name}
в URL доступне в якості аргументу
$name
у вашому контролері.
Але завдяки використанню атрибутів, маршрут і контролер живуть поруч один з одним
один з одним. Потрібна ще одна сторінка? Додайте ще один маршрут і метод в DefaultController
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
// src/Controller/DefaultController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class DefaultController
{
// ...
#[Route('/simplicity', methods: ['GET'])]
public function simple(): Response
{
return new Response('Simple! Easy! Great!');
}
}
Маршрутизація може робити навіть більше, але ми залишимо це на наступний раз. Зараз нашому додатку потрібно більше функцій! На кшталт шаблонізатору, логування, інструментів налагодження тощо.
Продовжуйте читати Flex: Cкомпонуйте ваш додаток.