типы погрузчиков
Основные виды маршрутизации погрузчиков описаны в the component's docs. В нем упоминается немало погрузчиков:
Вы найдете всю основную л oaders в Symfony\Component\Routing\Loader namespace
Все это основано на , так что стоит, если вы также прочитали о the Config component.
Способ каждого загрузчика supports()
скажет вам, при каких обстоятельствах фактически используется загрузчик. Например, для YamlFileLoader
это:
public function supports($resource, $type = null)
{
return is_string($resource)
&& 'yml' === pathinfo($resource, PATHINFO_EXTENSION)
&& (!$type || 'yaml' === $type);
}
Вы можете видеть, что смотрит на расширение и тип ресурса.
Пользовательские погрузчики
Вы можете реализовать свои собственные загрузчики, реализовав Symfony\Component\Config\Loader\LoaderInterface.
Подробнее об этом в кулинарной книге How to Create a custom Route Loader. На самом деле это объясняет, как работают загрузчики маршрутизации. Посмотрите также на сторонние загрузчики, например, на номер FOSRestBundle.
Как подключить все это вместе
Взгляните на сгенерированный контейнер в Symfony Standard Edition, чтобы увидеть, как полные рамки стека провода все это вместе. Это должно выглядеть примерно так:
/**
* Gets the 'routing.loader' service.
*
* This service is shared.
* This method always returns the same instance of the service.
*
* @return \Symfony\Bundle\FrameworkBundle\Routing\DelegatingLoader A Symfony\Bundle\FrameworkBundle\Routing\DelegatingLoader instance.
*/
protected function getRouting_LoaderService()
{
$a = $this->get('file_locator');
$b = $this->get('annotation_reader');
$c = new \Sensio\Bundle\FrameworkExtraBundle\Routing\AnnotatedRouteControllerLoader($b);
$d = new \Symfony\Component\Config\Loader\LoaderResolver();
$d->addLoader(new \Symfony\Component\Routing\Loader\XmlFileLoader($a));
$d->addLoader(new \Symfony\Component\Routing\Loader\YamlFileLoader($a));
$d->addLoader(new \Symfony\Component\Routing\Loader\PhpFileLoader($a));
$d->addLoader(new \Symfony\Component\Routing\Loader\AnnotationDirectoryLoader($a, $c));
$d->addLoader(new \Symfony\Component\Routing\Loader\AnnotationFileLoader($a, $c));
$d->addLoader($c);
return $this->services['routing.loader'] = new \Symfony\Bundle\FrameworkBundle\Routing\DelegatingLoader($this->get('controller_name_converter'), $this->get('monolog.logger.router', ContainerInterface::NULL_ON_INVALID_REFERENCE), $d);
}
Ключевым моментом здесь является LoaderResolver, которая заботится о поиске подходящего погрузчика для типа конфигурации.
Спасибо, кажется, намного сложнее того, что я думал. Я надеялся что-то вроде этого: http://symfony.com/doc/current/reference/configuration/framework.html говорит, что там должны быть конфигурации маршрутизации, но эта часть отсутствует. Возможно, я должен написать ошибку? – JorgeeFG
Вопрос в том, зачем он вам нужен. Все типы маршрутизации упоминаются в документах по имени, а Symfony делает довольно хорошую работу, угадывая тип тоже. Обычно, если вам нужно сделать что-нибудь обычай, вы знаете свои вещи. –
Мне было просто интересно, мне нравится знать, какие конфигурации я могу установить на всякий случай, если есть какие-то интересные функции, которые я мог бы использовать, но не знал. Спасибо за ответ. Я не знал, что он догадывается о «типе». Что произойдет, если я укажу, например, тип: yaml? – JorgeeFG