我正在创建基于Sf2组件的自己的框架,我尝试创建路由器服务。
我需要generateUrl()
方法
protected function generateUrl($route, $parameters = array(), $referenceType = UrlGeneratorInterface::ABSOLUTE_PATH)
{
return $this->get('router')->generate($route, $parameters, $referenceType);
}
我试试这个
$container = new ContainerBuilder();
$container->setDefinition('router_loader', new Definition('Symfony\Component\Config\Loader\LoaderInterface'));
$container->setDefinition('router', new Definition('Symfony\Component\Routing\Router', array()));
当我在我的methodAction中执行时
$this->generateUrl('home');
他回复我:
可捕获的致命错误:参数1传递给 Symfony \ Component \ Routing \ Router :: __ construct()必须是。的实例 Symfony \ Component \ Config \ Loader \ LoaderInterface,没有给出 第95行的D:\ xampp \ htdocs \ my_fw \ vendor \ symfony \ routing \ Router.php
查看路由器构造函数我看到了。我需要那个界面
public function __construct(LoaderInterface $loader, $resource, array $options = array(), RequestContext $context = null, LoggerInterface $logger = null)
如何避免服务中的实现?
**New update:** routing.php
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
// Routing
$routes = new RouteCollection();
// Home
$routes->add('home', new Route('/', array(
'_controller' => 'MyCompany\\Controller\\HomeController::indexAction',
)));
答案 0 :(得分:0)
您遇到此错误,因为您正在配置没有服务定义的路由器服务,服务定义应该有您的服务参数,这是您的错误的来源,因为容器尝试创建没有参数的路由器check this
为了更好地使用,您可以在service.yml / .xml文件中配置路由器服务
答案 1 :(得分:0)
修改:setting up the routing component有详细的设置说明
尝试将router_loader
服务作为参数注入router
服务。在这种情况下,您必须使用Symfony\Component\DependencyInjection\Reference
类。
使用all in one Router
类时,必须使用配置文件配置路由。您必须使用FileLocator
和真正的Loader类,例如YamlFileLoader
,您不能只使用该接口(服务通常不能成为Symfony中的接口)。
router
服务的服务容器设置应如下所示:
use Symfony\Component\DependencyInjection\Reference;
// Loads config files from the current directory, change this to
// your liking, or add more than one path
$container->setDefinition('router_config_locator', new Definition(
'Symfony\Component\Config\FileLocator', [[__DIR__]]
));
$container->setDefinition('router_loader', new Definition(
'Symfony\Component\DependencyInjection\Loader\YamlFileLoader', [
new Reference('router_config_locator'),
]
));
$container->setDefinition('router',
new Definition('Symfony\Component\Routing\Router', array(
'loader' => new Reference('router_loader'),
// Definition of routes in Yaml form
'resource' => 'routes.yml',
))
);
routes.yml
文件包含您的路线定义:
home:
path: /home
defaults: {_controller: "MyController:index"}
另请参阅有关{{3}}的此文档页面,其中还讨论了如何在没有所有类和配置文件的情况下设置路由。