Symfony 5.4版和PHP 7.4版。*
在一个普通的Symfony项目中,我可以创建一个带有路径(注解)的控制器,它工作得很好。现在我已经创建了一个包,并通过Composer将其放入一个测试项目中。在这个包中,我创建了一个带有方法和路径(注解)的控制器。
当我使用debug:router时,bundle的路由没有显示。我不知道如何配置这个bundle才能在它被放入的任何项目上使用控制器路由。
我可以访问Helper类,但我不知道如何将控制器与路由一起使用。
**bundle中的示例:**在我的bundle中,我有一个渲染基本分支模板的控制器:
<?php
namespace MyWork\MyBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class BundlePageController extends AbstractController
{
/**
* @Route("/bundle_index", name="bundle_index")
*
* @return Response
*/
public function index(): Response
{
return $this->render('bundle_page.html.twig');
}
}
当我找到的解决方案说,我必须绑定这个在路由器配置.但它没有工作.我已经创建了一个routes.yml在我的捆绑包和想法是导入这个routes. yml在routes.yml从项目中的捆绑包将被使用.但我不知道参数/命名,基本上我不知道把什么.
我也尝试过使用symfony文档,但我仍然很挣扎。
我必须在service.yml中加载这个控制器作为服务吗?我有点迷路了,任何帮助都很感激。
**编辑:**我在这里找到一个帖子Symfony 5 Reusable Bundles controller has no container set, did you forget to define it as a service subscriber
这里,控制器被添加到服务配置文件和路由配置文件中。我将尝试使用这个。
**EDIT:**现在我添加了以下内容
捆绑服务xml
<service
id="mywork_mybundle.controller.bundle_page_controller"
class="MyWork\MyBundle\Controller\BundlePageController"
public="true"/>
<service
id="MyWork\MyBundle\Controller\BundlePageController"
alias="mywork_mybundle.controller.bundle_page_controller"/>
捆绑路由xml
<route
id="mywork_mybundle_bundle_page_controller"
path="/bundle-page"
controller="mywork_mybundle.controller.bundle_page_controller"/>
现在我必须弄清楚如何使这在项目中工作。
**EDIT:**路由现在显示在debug:router中,但出现错误
我已经把routes.xml改成了yaml,因为我在项目yaml文件中导入它时遇到了问题。所以现在在bundle中我有这个routes.yaml文件:
show_list:
path: /bundle/page/list
controller: MyWork\MyBundle\Controller\BundlePageController::list
然而,当我尝试访问此路由时,我收到以下错误消息URI“/bundle/page/list”的控制器不可调用:无法从容器中提取控制器“MyWork\MyBundle\Controller\BundlePageController”,因为它是专用的。是否忘记使用“controller.service_arguments”标记服务?
这是否意味着它不能再读取service.xml了,因为我把routes.xml改成了yaml?就像前面说的,服务包含了true的公钥。所以它应该是public的。我不知道是什么导致了这里的问题。
**编辑:**现在,我在捆绑包服务xml中创建了以下行:
<service id="Symfony\Bundle\FrameworkBundle\Controller\AbstractController">
<tag name="controller.abstract_controller"/>
</service>
并将其作为参数提供给我的控制器
<service
id="mywork_mybundle.controller.bundle_page_controller"
class="MyWork\MyBundle\Controller\BundlePageController"
public="true">
<argument type="service" id="controller.abstract_controller"/>
</service>
<service
id="MyWork\MyBundle\Controller\BundlePageController"
alias="mywork_mybundle.controller.bundle_page_controller"/>
我的想法是,也许我必须先加载抽象控制器服务,然后把它给我的控制器。但老实说,我不知道...
现在我看到“..mycontroller...”没有容器集,您是否忘记将其定义为服务订户?
1条答案
按热度按时间luaexgnf1#
项目的
config/routes.xml
应该***导入***包的路由文件。下面是"How to Include External Routing Resources"中的例子: