После ответа BetaRide я оказался на правильном пути, но этого было недостаточно.Затем он жаловался: «Невозможно сгенерировать URL для названного маршрута», «поскольку такой маршрут не существует».
Чтобы создать действительный запрос, я изменил его, чтобы запросить корень проекта следующим образом:
$request = new Request();
$request->create('/');
$this->container->enterScope('request');
$this->container->set('request', $request, 'request');
Возможно, вам потребуется вызвать другой маршрут (защищенный root?), Root работал для меня очень хорошо.
Документы Symfony2
Бонусное добавление:
Мне пришлось сделать столько шаблонов / маршрутизации в cli с помощью команд Symfony2, что я обновил метод initializeContainer()
в AppKernel.Он создает маршрут к корню сайта, устанавливает контекст маршрутизатора и подделывает логин пользователя:
protected function initializeContainer()
{
parent::initializeContainer();
if (PHP_SAPI == 'cli') {
$container = $this->getContainer();
/**
* Fake request to home page for cli router.
* Need to set router base url to request uri because when request object
* is created it perceives the "/portal" part as path info only, not base
* url and thus router will not include it in the generated url's.
*/
$request = Request::create($container->getParameter('domain'));
$container->enterScope('request');
$container->set('request', $request, 'request');
$context = new RequestContext();
$context->fromRequest($request);
$container->get('router')->setContext($context);
$container->get('router')->getContext()->setBaseUrl($request->getRequestUri());
/**
* Fake admin user login for cli. Try database read,
* gracefully print error message if failed and continue.
* Continue mainly for doctrine:fixture:load when db still empty.
*/
try {
$user = $container->get('fos_user.user_manager')->findUserByUsername('admin');
if ($user !== null) {
$token = $token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$this->getContainer()->get('security.token_storage')->setToken($token);
}
} catch (\Exception $e) {
echo "Fake Admin user login failed.\n";
}
}
}
Возможно, вам не нужна последняя $container->get('router')->getContext()->setBaseUrl($request->getRequestUri());
часть, но я должен был это сделать, потому что мой сайтroot был по адресу domain.com/siteroot/, а маршрутизатор удалял / siteroot / away для генерации URL.