Загальна картина

Дата оновлення перекладу 2022-12-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
12
quick_tour/
├─ .env
├─ .env.dist
├─ 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
13
<?php
// src/Controller/DefaultController.php
namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;

class DefaultController
{
    public function index()
    {
        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($name)
      {
-         return new Response('Привіт!');
+         return new Response("Привіт $name!");
      }
  }

Спробуйте цю сторінку за посиланням http://localhost:8000/hello/Symfony. Ви маєте побачити: Привіт, Symfony! Значення {name} в URL доступне в якості аргументу $name у вашому контролері.

Але це може бути ще простіше! Так що давайте встановимо підтримку анотацій:

1
$ composer require annotations

Тепер, закоментуйте маршрут YAML, додавши символ #:

1
2
3
4
# config/routes.yaml
# index:
#     path: /Привіт/{name}
#     controller: 'App\Controller\DefaultController::index'

Замість цього, додайте маршрут прямо над методом контролера:

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;
+ use Symfony\Component\Routing\Annotation\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
17
<?php
// src/Controller/DefaultController.php
namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class DefaultController
{
    // ...

    #[Route('/simplicity', methods: ['GET'])]
    public function simple(): Response
    {
        return new Response('Simple! Easy! Great!');
    }
}

Маршрутизація може робити навіть більше, але ми залишимо це на наступний раз. Зараз нашому додатку потрібно більше функцій! На кшталт шаблонізатору, логування, інструментів налагодження тощо.

Продовжуйте читати Flex: Cкомпонуйте ваш додаток.