Как установить установщик?
php -r "readfile('https://symfony.com/installer');" > symfony
Как установить symfony?
symfony new project-name
Как установить старый symfony?
symfony new old-project-name 2.8
Как настроить PhpStorm?
- устанавливаем плагин Symfony Plugin
- устанавливаем плагин PHP Annotations
- ставим галочку Languages & Frameworks > PHP > Symfony > Enable Plugin for this Project
- на этой же вкладке меняем пути на
var/cache/dev/appDevUrlGenerator.php
иvar/cache/dev/translations
Как создать простую страницу?
Создаём класс (файл src/AppBundle/Controller/MainController.php
).
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class MainController extends Controller
{
}
Добавляем в класс метод:
/**
* @Route("/")
* @return \Symfony\Component\HttpFoundation\Response
*/
public function showAction()
{
return $this->render('main/show.html.twig');
}
где - @Route("/")
устанавливает путь по которому будет срабатывать контроллер, а main/show.html.twig
это путь к шаблону (файл app/Resources/views/main/show.html.twig
)
Остаётся только создать файл app/Resources/views/main/show.html.twig
с нужным содержимым.
Как зайти на dev-версию сайта?
http://example.com/app_dev.php/
Как сбросить кеш на prod версии?
php bin/console cache:clear --env prod
Как сделать наследуемые шаблоны с помощью twig?
Создаём базовый шаблон: app/Resources/views/base.html.twig с содержимым:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>{% block title %}Welcome!{% endblock %}</title>
{% block stylesheets %}{% endblock %}
<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
</head>
<body>
{% block body %}{% endblock %}
{% block javascripts %}{% endblock %}
</body>
</html>
Создаём шаблон главной страницы: app/Resources/views/main/show.html.twig с содержимым:
{% extends 'base.html.twig' %}
{% block body %}
Main page!
{% endblock %}
Как отдать json?
Создаём в контроллере метод:
/**
* @Route("/json")
* @return \Symfony\Component\HttpFoundation\JsonResponse
*/
public function getJsonAction()
{
$jsonData = [
'success' => true,
'time' => time(),
];
return new JsonResponse($jsonData);
}
Как сделать обработку динамической части пути?
Создаём в контроллере метод:
/**
* @Route("/news/{id}")
* @param $id
* @return \Symfony\Component\HttpFoundation\Response
*/
public function newsItemAction($id)
{
return $this->render('news/item.html.twig', ['id' => $id]);
}
Создаём шаблон app/Resources/views/news/item.html.twig:
{% extends 'base.html.twig' %}
{% block body %}
Новость {{ id }}
{% endblock %}
Как сделать валидацию динамической части url?
Пропускаем только путь в котором в id содержатся только цифры:
@Route("/news/{id}", requirements={"id": "\d+"})
Как вставить в twig-шаблоне ссылку на динамический url?
Добавляем в контроллер имя:
@Route("/news/{id}", name="news_item")
Добавляем в шаблон ссылку:
<a href="{{ path('news_item', {'id': 123}) }}">Новость</a>
Как определить ограниченный список вариантов динамической части url?
@Route("/lang/{lang}", requirements={"lang":"ru|en"})
Как подключить дополнительный js-файл в дочернем шаблоне:
Базовый шаблон (файл base.html.twig
):
...
{% block javascripts %}
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
{% endblock %}
...
Дочерний шаблон:
{% extends 'base.html.twig' %}
{% block javascripts %}
{{ parent() }}
<script src="{{ asset('js/main.js') }}"></script>
{% endblock %}