Я новичок в symfony2. Я начал с некоторых уроков, а затем начал строить SYMBLOG. Я понял это, и я могу добавить или изменить функциональность. У меня немного путаница в рабочем процессе, я имею в виду, как файлы работают вместе, чтобы отобразить страницу или произвести вывод. Может ли кто-нибудь объяснить мне подробно с самого начала, как этот поток продолжается в symfony2. начиная с пользовательского запроса, пользователь вводит URL-адрес, пока symfony2 не отобразит результаты. пожалуйста, укажите routing.yml в потоке.
Рабочий процесс с Symfony2?
Ответ 1
Вы должны проверить эту ссылку. Symfony - большая картинка
В нем подробно описываются все действия, связанные с тем, как вы вводите URL-адрес в браузере на страницу, получаемую визуализацией.
В основном все запросы переходят к Front Controller. Его задача - направить запросы на соответствующий код контроллера. Он делает это с помощью маршрутов, определенных в файле app/config/routing.yml
. Контроллеры, которые определены в src/<BundleName>/Controller/<name>
, выполняют некоторую бизнес-логику, например, получают данные из модели (репозитория) и отправляют эту информацию в представление (шаблоны). Представления - это просто HTML-код. Symfony использует шаблонный движок под названием Twig. Вместо того, чтобы включать <?php ... ?>
блоки в код HTML, Symfony передает данные с контроллера, и его можно легко использовать внутри представления в блоках Twig {% %}
или {{ }}
.
Проще говоря, вот рабочий процесс:
- Браузер отправляет запрос
- Запрос, полученный в переднем контроллере
web/app_dev.php
или web/app.php- Передний контроллер проверяет маршруты, определенные в
app/config/routing.yml
, и отправляет запрос соответствующему контроллер, определенный вsrc/<BundleName>/Controller/<controller_name>
- Контроллер готовит контент, необходимый в HTML (пример - запрос базы данных из
src/<BundleName>/Repository
) и отправляет информацию в представление -src/Resources/views/<twig file name>
- Представление создает HTML-код и отправляет его обратно на контроллер
- Контроллер создает ответ HTTP и отправляет его обратно в браузер
Есть такие вещи, как app/AppKernel, которые входят между ними, но я пропустил его.
Вот полезные выдержки из приведенной выше ссылки:
URL:
http://localhost/Symfony/web/app_dev.php/demo/hello/Fabien
Что здесь происходит? Позвольте проанализировать URL: app_dev.php: Это передний контроллер. Это уникальная точка входа приложения и отвечает на все запросы пользователей; /demo/hello/Fabien: Это виртуальный путь к ресурсу, к которому пользователь хочет получить доступ. Ваша ответственность как разработчика заключается в том, чтобы написать код, который отображает запрос пользователя (/demo/hello/Fabien) на связанный с ним ресурс (страница Hello Fabien! HTML).
Routing:
Symfony2 направляет запрос на код, который обрабатывает его, пытаясь сопоставить запрошенный URL с некоторыми настроенными шаблонами. По умолчанию эти шаблоны (называемые маршрутами) определяются в файле конфигурации app/config/routing.yml. Когда вы находитесь в среде dev, указанной указателем app_ dev.php, также загружается файл конфигурации app/config/routing_dev.yml. В стандартной версии маршруты к этим "демонстрационным" страницам помещаются в этот файл:
_welcome:
pattern: /
defaults: { _controller: AcmeDemoBundle:Welcome:index }
Контроллер:
Symfony2 выбирает контроллер на основе значения _controller из конфигурации маршрутизации: AcmeDemoBundle: Welcome: index. Эта строка является логическим именем контроллера и ссылается на метод indexAction из класса Acme\DemoBundle\Controller\WelcomeController:
class WelcomeController extends Controller
{
public function indexAction()
{
return $this->render('AcmeDemoBundle:Welcome:index.html.twig');
}
}
Вид:
Контроллер отображает шаблон src/Acme/DemoBundle/Resources/views/Demo/hello.html.twig
{% extends "AcmeDemoBundle::layout.html.twig" %}
{% block title "Hello " ~ name %}
{% block content %}
<h1>Hello {{ name }}!</h1>
{% endblock %}
Вы также можете проверить Symfony2 architecture