2015-02-05 2 views
1

Я искал документацию компонента Routing Component, явно, какие типы параметров он принимает.Symfony2 сообщает о компоненте маршрутизации?

Например, type: annotations в моем только что созданном приложении routing.yml заставил меня посмотреть, какие другие типы есть, но на нем нет документов. Я могу найти документацию в Книге и немного в Компонентах.

ответ

3

типы погрузчиков

Основные виды маршрутизации погрузчиков описаны в 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, которая заботится о поиске подходящего погрузчика для типа конфигурации.

+0

Спасибо, кажется, намного сложнее того, что я думал. Я надеялся что-то вроде этого: http://symfony.com/doc/current/reference/configuration/framework.html говорит, что там должны быть конфигурации маршрутизации, но эта часть отсутствует. Возможно, я должен написать ошибку? – JorgeeFG

+0

Вопрос в том, зачем он вам нужен. Все типы маршрутизации упоминаются в документах по имени, а Symfony делает довольно хорошую работу, угадывая тип тоже. Обычно, если вам нужно сделать что-нибудь обычай, вы знаете свои вещи. –

+0

Мне было просто интересно, мне нравится знать, какие конфигурации я могу установить на всякий случай, если есть какие-то интересные функции, которые я мог бы использовать, но не знал. Спасибо за ответ. Я не знал, что он догадывается о «типе». Что произойдет, если я укажу, например, тип: yaml? – JorgeeFG

Смежные вопросы