Общая картина
Дата обновления перевода 2025-02-12
Общая картина
Начните использовать 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: Составьте ваше приложение.