Làm theo câu trả lời của BetaRide để tôi đi đúng hướng nhưng điều đó không đủ. Sau đó, nó đã phàn nàn: "Không thể tạo URL cho tuyến đường được đặt tên" "vì tuyến đường như vậy không tồn tại".
Để tạo một yêu cầu hợp lệ Tôi đã sửa đổi nó để yêu cầu thư mục gốc của dự án như sau: (? Rễ bảo đảm)
$request = new Request();
$request->create('/');
$this->container->enterScope('request');
$this->container->set('request', $request, 'request');
Bạn có thể cần phải gọi một con đường khác, rễ làm việc cho tôi chỉ khỏe.
Symfony2 Docs
Bonus thêm:
tôi đã phải làm rất nhiều khuôn mẫu/định tuyến trong cli qua Symfony2 lệnh mà tôi đã cập nhật các phương pháp initializeContainer()
trong AppKernel. Nó tạo ra một lộ trình vào thư mục gốc của trang web, đặt bối cảnh router và hàng giả một người dùng đăng nhập:
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";
}
}
}
Bạn có thể không cần $container->get('router')->getContext()->setBaseUrl($request->getRequestUri());
phần cuối cùng, nhưng tôi đã phải làm điều đó vì gốc trang web của tôi là tại miền .com/siteroot/và các bộ định tuyến đã được tước/siteroot/đi cho thế hệ url.
Nguồn
2014-11-10 15:39:12
Điều này không giải quyết được sự cố. Khi logn là tài sản được sử dụng (có thể không hiển thị trực tiếp trong các mẫu của bạn), nó cần phải có một dịch vụ RequestContext bằng cách nào đó. – BetaRide
Tôi gặp lỗi tương tự nhưng giải pháp này không giải quyết được vấn đề.http: //stackoverflow.com/questions/17942738/erro-you-cannot-create-a-service-templating-helper-assets-of-an-inactive -sco – vishal
Giải pháp này làm việc cho tôi khi tôi đăng nó. Tôi sẽ không tranh cãi trong một phút rằng nó không hoạt động với các phiên bản Symfony mới hơn so với lúc đó. Khi nói đến việc thoát khỏi con đường bị đánh đập, Symfony là một mục tiêu di chuyển. Tôi đã không có thời gian cho mã trong một thời gian vì vậy tôi không thể thực sự điều tra vào lúc này, nhưng bạn có thể thử giải pháp của BetaRide. – Matthew