-
Установите composer - менеджер пакетов
-
Установите Symfony CLI - утилита для командной строки, которая облегчит работу по созданию проектов и их настройке.
Если во время установки у вас был запущен терминал - нужно его перезапустить, иначе новые команды (composer и symfony) могут не работать.
-
Инициализируйте проект, для этого выполните команду:
symfony new %project_name%
Появится папка
%project_name%
с вашим проектом symfony. Коротко по важным папкам:config/
- настройки проекта и отдельных сервисовsrc/
- ваш исходный кодpublic/
- корневая директория сайта, именно в нее стоит направлять веб-серверvendor/
- исходный код всех установленных composer'ом сторонних библиотек -
Запустите веб-сервер. Тут есть 2 варианта:
- Можете продолжить использование Open Server в качестве веб-сервера, в таком случае нужно будет настроить новый домен (или изменить настройки localhost) таким образом, чтобы в качестве корневой папки использовалась папка
public/
созданного проекта.
Если вы используете
apache2
- дополнительно потребуется установитьcomposer require symfony/apache-pack
- в корне проекта сгенерируется файл.htaccess
с нужными для работы symfony из-под apache2 правилами.- Можете использовать встроенный веб-сервер symfony, для этого из папки с проектом следует запустить команду
symfony server:start
(илиsymfony server:start -d
, чтобы запустить сервер в фоновом режиме). По ссылке localhost:8000 будет доступна стартовая страница нового symfony-проекта.
- Можете продолжить использование Open Server в качестве веб-сервера, в таком случае нужно будет настроить новый домен (или изменить настройки localhost) таким образом, чтобы в качестве корневой папки использовалась папка
-
Установите вспомогательные бандлы (библиотеки). По умолчанию в проекте есть только самое необходимое, дополнительно нам понадобятся:
symfony composer req orm
- Doctrine - бандл, реализующий работу с БДsymfony composer req doctrine/annotations
- аннотации доктрин понадобятся нам в контроллерах для определения роутинга и параметров генерации urlsymfony composer req security
- security бандл реализует функциональность пользователей - авторизацию, регистрацию и разграничение ролейsymfony composer req twig
- twig - самый популярный шаблонизатор на symfony (и не только)symfony composer req form
- form - бандл для работы с формамиsymfony composer req validator
- validator - бандл для валидации данныхsymfony composer req symfony/maker-bundle --dev
--dev здесь говорит о том, что этот бандл нужен только для разработки приложения и на боевом сервере его устанавливать не нужно. Бандл maker добавляет возможность генерации различных сущностей (контроллеров, сущностей БД, миграций, коммандов и многого другого, полный список доступен по коммандеsymfony console list make
)symfony composer req profiler --dev
- профилировщик поможет в отладке ошибок, просмотре служебной информации и анализе быстродействия приложения. В нижней части экрана после установки появится дополнительная панельsymfony composer req orm-fixtures --dev
фикстуры - используется для наполнения базы данных первоначальными или фейковыми данными (для тестирования)
За 1 раз можно устанавливать сразу несколько библиотек, просто перечислив их через пробел.
-
Настройте переменные окружения. В корне есть файл .env, содержащий настройки по умолчанию. Скопируйте его в .env.local - это будут ваши локальные настройки, привязанные к конкретному серверу. Пропишите строку подключения к БД, например:
DATABASE_URL=pgsql://postgres:@127.0.0.1:5432/blog?serverVersion=11&charset=utf8
-
Создайте контроллер, который будет отдавать страницу about -
symfony console make:controller AboutController
или простоsymfony console make:controller
, чтобы использовать интерактивный режим.В результате у нас создалось 2 файла -
сreated: src/Controller/AboutController.php created: templates/about/index.html.twig
В аннотации экшна контроллера настраивается ссылка, по которой открывается страница, в шаблоне отображаемая верстка с выводимыми данными. Данные в шаблон передает экшн контроллера.
-
Добавьте описание проекта на страницу about и скорректируйте верстку по своему желанию. Так как страница о проекте у нас статичная - описание можно разместить непосредственно в шаблоне.
-
Создайте сущность пользователя -
symfony console make:user
, на вопросы можно отвечать по умолчанию - имя User, хранение в БД и проверка пароля. Вы также можете дополнить созданный класс пользователя дополнительными полями - телефон, имя, дата рождения и прочее, запустив командуsymfony console make:entity User
-
Создайте миграцию для последующего внесения изменения в БД -
symfony console make:migration
. Если у вас на момент запуска еще не создана база данных (указанная в строке подключение) - можете создать ее командойsymfony console doctrine:database:create
-
Примените миграции к БД -
symfony console doctrine:migrations:migrate
-
Сделайте форму авторизации -
symfony console make:auth
. Следуя инструкциям поправьте метод onAuthenticationSuccess в классеApp\Security\UserAuthentificatorAuthenticator
- после успешной авторизации пользователь должен попадать на главную страницу. -
Так как у нас пользователей в БД нет - нам нужно их создать. Чтобы не делать это вручную в БД, нужно использовать фикстуры. Создайте фикстуру, которая будет добавлять 2 пользователей - с правами администратора и без.
symfony console make:fixture
. Команда создаст класс-заготовку, в которой нужно будет создать пользователей, нужно указать у них email, роль ('ROLE_ADMIN' у администратора) и пароль (закодированный). Примените фикстуру -symfony console doctrine:fixtures:load
. Будьте осторожны, т.к. фикстура при применении затирает имеющиеся в БД данные. -
Перейдите по ссылке /login и попробуйте авторизоваться под созданными пользователями. Авторизация должна проходить успешно, а в панели профилировщика отображаться username текущего пользователя. Открытие ссылки /logout будет разлогинивать пользователя.
-
Создайте форму регистрации пользователя -
symfony console make:registration-form
. Форма регистрации доступна по ссылке /register -
Сделайте так, чтобы формы регистрации и авторизации были недоступны для авторизованного пользователя. Для этого нужно проверить в соответствующих экшнах контроллера авторизованность пользователя (
$this->getUser() !== null
) и в случае, если пользователь авторидован - делать редирект на другую страницу -return new RedirectResponse($this->generateUrl('about'))
.about
здесь - имя роута, куда вы хотите редиректить пользователя.
Кастомизируйте шаблоны таким образом, чтобы авторизованному пользователю выводилась ссылка на выход с сайта (/logout), а неавторизованным отображались ссылки на авторизацию и регистрацию.
Адреса ссылок не стоит хардкодить, следует использовать функциональность шаблонизатора - {{ path('logout') }}
сгенерирует ссылку на экшн с именем logout
.
Для проверки роли пользователя twig также имеет специальные функции:
{% if is_granted('ROLE_ADMIN') %}
<a href="...">Выйти</a>
{% endif %}
Для облегчения верстки можно использовать вспомогательные css-фреймворки, например, bootstrap или materialize. При этом допускается как просто подключить сгенерированные css/js файлы фреймворков, так и настроить полноценную сборку фронтенда посредством yarn, symfony encore и того же bootstrap, который также имеет готовый шаблон для использования в формах симфони.
Подробнее о кастомизации форм можно почитать в документации.