我正在做一个Symfony项目,其他开发人员并没有真正提供项目的具体信息,所以这项工作是我过去五年中最糟糕的项目经历之一。我将创建两个Symfony捆绑包,一个OrderBundle
和一个ErpBundle
,在OrderBundle
中创建一些实体,并在ErpBundle
中创建一个服务和一个控制器。
这些实体是正常的学说实体,从这个问题的角度来看,我认为它们并不重要。HomeController
在的文件夹中
mainfolder/vendor/Myproject/myfolder/src/Myproject/App/ErpBundle/Controller/Admin/HomeController.php,它是这样的:
<?php
namespace MyprojectAppErpBundleController;
use SymfonyBundleFrameworkBundleControllerController;
class HomeController extends AdminController
{
/**
* @Route("/home", defaults={
* "_format": "html"
* })
*/
public function indexAction()
{
//some code
}
/**
* @Route( "/home/menu",
* defaults={"_format": "html"})
*/
public function indexMenuAction()
{
//some code
}
}
它的routing.yml包含这个
myproject_app_erp.myproject_admin.controller:
resource: erp
type: myproject_admin
它的服务.yml包含这个
services:
# erp.example:
# class: MyprojectAppErpBundleExample
# arguments: ["@service_id", "plain_value", "%parameter%"]
parameters:
myproject_app_erp.routing_controllers:
home: 'MyProjectAppErpBundleControllerAdminHomeController'
而且,在主文件夹/app/config/routing.yml中,我有这个部分:
myproject_app_erp:
resource: '@MyprojectAppErpBundle/Resources/config/routing.yml'
理论上,这应该运行我需要的HomeController
,它反过来会与我描述的服务一起工作,它会对实体做一些事情,但我却得到了以下错误:
必须定义参数"myproject_app_erp.routing_controllers"在erp中(从"/var/www/mainfolder/vendor/myproject/sing/src/myproject/App/ErpBundle/Resources/config/routing.yml")。
我曾试图将parameters
部分从service.yml复制到routing.yml中,以使该部分存在,但错误消息遗漏了该部分,但错误信息仍然存在。从昨天开始,我一直在尝试用很多方法来解决这个问题,我的印象是,与编写代码相比,我在设置工作环境方面遇到了更多的困难。我在Symfony文档中读到了关于服务创建的内容,这就是为什么我能够达到我所能达到的程度,但我不知道如何解决这个问题。我想我需要检查自动加载是如何工作的,因为/home
路由似乎在那里受到控制,但我不知道我是否正确,以及如何达到这一点。我的问题是:我应该检查什么,在哪里以及如何解决这个问题。
编辑:
通过实现DependencyInjection,但在ErpBundle
中创建了一个名为DependencyInjection的文件夹,并实现了以下两个类,我成功地避免了上述错误:
配置.php
<?php
namespace MyprojectAppErpBundleDependencyInjection;
use SymfonyComponentConfigDefinitionBuilderTreeBuilder;
use SymfonyComponentConfigDefinitionConfigurationInterface;
/**
* This is the class that validates and merges configuration from your app/config files
*
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html#cookbook-bundles-extension-config-class}
*/
class Configuration implements ConfigurationInterface
{
/**
* {@inheritdoc}
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('myproject_app_erp');
return $treeBuilder;
}
}
MyprojectAppErpExtension.php
<?php
namespace MyprojectAppErpBundleDependencyInjection;
use SymfonyComponentDependencyInjectionContainerBuilder;
use SymfonyComponentConfigFileLocator;
use SymfonyComponentHttpKernelDependencyInjectionExtension;
use SymfonyComponentDependencyInjectionLoader;
/**
* This is the class that loads and manages your bundle configuration
*
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
*/
class MyprojectAppErpExtension extends Extension
{
/**
* {@inheritdoc}
*/
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$loader = new LoaderYamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
}
}
当页面现在加载时,它仍然使用另一个捆绑包的HomeController
,而不是ErpBundle
中的那个。
事实证明,项目中有一个自定义的特定于路由的逻辑,我不得不按照之前未知的特定于项目的约定进行一些数据库更改。细节非常具体,我无法在这里分享它们而不侵犯与项目相关的商业机密,所以我知道答案是什么,但无法与社区分享。