Хорошая вещь о введении всех этих новых «вспомогательных» функций состоит в том, что я получаю довольно много повторений, объясняя их.

ел бы использовать сочетание маршрутизации yaml и php в приложении Symfony (3.3.8). Я довольно удобно с маршрутизацией yaml, поэтому я использовалbin/console doctrine:generate:crud Команда, чтобы увидеть, как будет выглядеть PHP-маршрутизация. Он сгенерировал файл маршрутизации, который выглядит как

<?php

use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;

$collection = new RouteCollection();

$collection->add('user_index', new Route(
    '/',
    array('_controller' => 'AppBundle:User:index'),
    array(),
    array(),
    '',
    array(),
    array('GET')
));

// other CRUD routes...

return $collection;

Это следует заформат, предложенный в документации Symfonyгде вы строитеRouteCollection с участиемRouteс, а затем вернуть его.

Когда я пытаюсь запустить свое приложение с этим файлом, даже если на него нет ссылок из основногоrouting.yml файл, я получаю эту ошибку:

 [Symfony\Component\Config\Exception\FileLoaderLoadException]
  The autoloader expected class "AppBundle\Resources\config\routing\restful_resource" to be defined i
  n file "/home/username/sites/appname/vendor/composer/../../src/AppBundle/Resources/config/routing/restfu
  l_resource.php". The file was found but the class was not in it, the class name or namespace probab
  ly has a typo in /home/username/sites/appname/app/config/services.yml (which is being imported from "/ho
  me/username/sites/appname/app/config/config.yml").



  [RuntimeException]
  The autoloader expected class "AppBundle\Resources\config\routing\restful_resource" to be defined i
  n file "/home/username/sites/appname/vendor/composer/../../src/AppBundle/Resources/config/routing/restfu
  l_resource.php". The file was found but the class was not in it, the class name or namespace probab
  ly has a typo.

Нужно ли мне перепроектировать этот файл, чтобы он действовал как класс, в отличие от предложенного формата в документации Symfony? Или мне нужно как-то сказать автозагрузчику игнорировать этот файл, чтобы он не пытался найти класс, в котором его не должно быть?

 Shaun07 сент. 2017 г., 16:59
Извините, я забыл включить в вопросrestful_resource.php Имя файла, созданного на основе объекта. Я попробую очистить кеш.
 Shaun07 сент. 2017 г., 17:28
Да, похоже, так оно и было. Я добавилResources Директория должна быть исключена из автопроводки и все прошло гладко. Вы хотели бы оставить свой комментарий в качестве ответа на кредит?
 Cerad07 сент. 2017 г., 16:55
Начните с полного удаления кеша. Вполне возможно, что это от некоторых ваших предыдущих попыток. В противном случае просто запустите весь ваш проект для restful_resource. Это необычное имя и откуда-то. Если вы используете S3.3, возможно, autowire вас испортит. Попробуйте добавить ресурсы в исключенные каталоги.
 Cerad07 сент. 2017 г., 17:01
Хорошо. Это почти наверняка autowire портит вас. Из коробки S3.3 + пытается все сделать сервисом. Поэтому отредактируйте app / config / services.yml и добавьте ресурсы в список исключаемых каталогов.

Ответы на вопрос(1)

Решение Вопроса

представленных в Symfony 3.3, стало понятие автоматического подключения сервисов. По моему не столь скромному мнению, много-много противоречивой магии за небольшую выгоду.

В рамках процесса автоматического подключения было решено сделать каждый класс сервисом по умолчанию. Предполагается, что в любом php-файле есть класс. Отсюда и попытка найти класс в Resources / config / routing / restful_resource.php.

Чтобы предотвратить такое поведение, вам нужно явно указать генератору службы пропускать каталоги.

// app/config/services.yml
AppBundle\:
    resource: '../../src/AppBundle/*'
    exclude: '../../src/AppBundle/{Entity,Repository,Tests,Resources}'

Хорошая вещь о введении всех этих новых «вспомогательных» функций состоит в том, что я получаю довольно много повторений, объясняя их.

Ваш ответ на вопрос