Загальна картина
Дата оновлення перекладу 2024-05-29
Загальна картина
Почніть використовувати 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 починається з малого, але зростає разом з вами.
Але перед тим, як ми зайдемо занадто далеко, давайте зануримося в основи, побудувавши нашу першу сторінку.
Почніть у config/routes.yaml
: це те, де ми можемо визначити URL до нашої
нової сторінки. Приберіть коментарі з прикладу, який вже живе у файлі:
1 2 3 4
# config/routes.yaml
index:
path: /
controller: 'App\Controller\DefaultController::index'
Це називається маршрут: він визначає URL до вашої сторінки (/
) і "контролер":
функцію, яка буде викликана кожний раз, коли хтось переходить по цьому URL. Ця
функція ще не існує, так що давайте створимо її!
У src/Controller
, створіть новий клас DefaultController
і всередині нього
метод index
:
1 2 3 4 5 6 7 8 9 10 11 12
// src/Controller/DefaultController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
class DefaultController
{
public function index(): Response
{
return new Response('Hello!');
}
}
Ось і все! Спробуйте зайти на домашню сторінку: http://localhost:8000/
. Symfony
бачить, що URL співпадає з нашим маршрутом, і виконує новий метод index()
.
Контролер - це звичайна функція з одним правилом: вона має повертати об'єкт Symfony
Response
. Але ця відповідь може містити що завгодно: простий текст, JSON або повну
сторінку HTML.
Але система маршрутизації набагато потужніша. Так що давайте зробимо маршрут більш цікавим:
1 2 3 4 5
# config/routes.yaml
index:
- path: /
+ path: /hello/{name}
controller: 'App\Controller\DefaultController::index'
URL до цієї сторінки змінився: тепер він /hello/*
: {name}
діє як підстановний
символ, який співпадає з чим завгодно. Все стає ще кращим! Оновіть ще й контролер:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<?php
// src/Controller/DefaultController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
class DefaultController
{
- 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
у вашому контролері.
Але це може бути ще простіше! Закоментуйте маршрут YAML, додавши символ #
:
1 2 3 4
# config/routes.yaml
# index:
# path: /hello/{name}
# controller: 'App\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('/hello/{name}', methods: ['GET'])]
public function index(string $name): Response
{
// ...
}
}
Це працює так само, як і раніше! Але використовуючи анотації, маршрут та контролер
живуть прямо поруч одне з одним. Потрібна ще одна сторінка? Просто додайте ще один
маршрут та метод в 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компонуйте ваш додаток.