首页 文章

无法在Symfony 3中设置注释路由

提问于
浏览
-1

暂时学习Symfony . 甚至无法启动,因为注释路由在我的项目中不起作用 .

我需要在我的项目asoft / OrganizerBundle中使用控件中的注释来路由所有内容 .

我做了什么:

E:\ Program Files \ Apache24 \ htdocs \ symfony.local \ organizer \ app \ config \ routing.yml

organizer:
resource: "@OrganizerBundle/Resources/config/routing.yml"
type: annotation

app:
    resource: '@AppBundle/Controller/'

E:\ Program Files \ Apache24 \ htdocs \ symfony.local \ organizer \ src \ asoft \ OrganizerBundle \ Resources \ config \ routing.yml:

organizer:
resource: "@OrganizerBundle/Controller/"
type:     annotation

\ Program Files \ Apache24 \ htdocs \ symfony.local \ organizer \ src \ asoft \ OrganizerBundle \ Controller \ DefaultController.php:

<?php
declare(strict_types = 1);

namespace asoft\OrganizerBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class DefaultController extends Controller
{
    /**
     * @Route("/")
     */
    public function showMainAction(): Response
    {
        return $this->showDayAction((new \DateTime())->format('Y-m-d'));
    }


    /**
     * @Route("/{day}")
     */
    public function showDayAction(string $day): Response
    {
        echo $day;
        return $this->render('OrganizerBundle:Default:index.html.twig');
    }
}

当我访问URL /时,我在日志中看到错误500和这个:

request.CRITICAL:未捕获PHP异常InvalidArgumentException:“URI的控制器”/“不可调用 . 类”asoft \ OrganizerBundle \ Controller \ DefaultController“上的预期方法”indexAction“ . 可用方法:”showMainAction“,”showDayAction“, “setContainer” . ”在E:\ Program Files \ Apache24 \ htdocs \ symfony.local \ organizer \ vendor \ symfony \ symfony \ src \ Symfony \ Component \ HttpKernel \ Controller \ ControllerResolver.php第98行{“exception”:“[object](InvalidArgumentException(代码:0):URI \“/ \”的控制器不可调用 . 类\“asoft \ OrganizerBundle \ Controller \ DefaultController \”上的预期方法\“indexAction \” . 可用方法:\“showMainAction \”,\“ showDayAction \“,\”setContainer \“ . 在E:\ Program Files \ Apache24 \ htdocs \ symfony.local \ organizer \ vendor \ symfony \ symfony \ src \ Symfony \ Component \ HttpKernel \ Controller \ ControllerResolver.php:98)” } []

当我访问/ 2007-05-02时,我收到错误404,这个:

request.ERROR:未捕获的PHP异常Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException:“在E:\ Program Files \ Apache24 \ htdocs \ symfony.local \ organizer \中找不到”GET / 2007-05-02“的路由vendor \ symfony \ symfony \ src \ Symfony \ Component \ HttpKernel \ EventListener \ RouterListener.php第125行{“exception”:“[object](Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException(code:0):找不到路由\“GET / 2007-05-02 \”在E:\ Program Files \ Apache24 \ htdocs \ symfony.local \ organizer \ vendor \ symfony \ symfony \ src \ Symfony \ Component \ HttpKernel \ EventListener \ RouterListener.php:125, Symfony \ Component \ Routing \ Exception \ ResourceNotFoundException(code:0):at E:\ Program Files \ Apache24 \ htdocs \ symfony.local \ organizer \ var \ cache \ prod \ appProdProjectContainerUrlMatcher.php:56)“} []

怎么了?我需要在我的yml文件中指定什么?

2 回答

  • 0

    得到了它:

    organizer:
    resource: '@OrganizerBundle/Resources/config/routing.yml'
    

    (在gobal routing.yml中)

    organizer:
    resource: "@OrganizerBundle/Controller/DefaultController.php"
    type: annotation
    

    在Bundle的routing.yml中

    仅在刺激后才能起作用 . 缓存清理 .

  • 0

    您正在混淆有关路线需要申报的方式 . 因此,如果您希望使用注释声明您的路由,首先,在 app/config/routing.yml 中,您需要摆脱 resource: "@OrganizerBundle/Resources/config/routing.yml" ,并将其替换为:

    organizer:
        resource: "@OrganizerBundle/Controller/"
        type:     annotation
    

    (也要注意缩进)

    其次,你调用 showMainAction() 的方式是错误的,因为你不能以这种方式调用 format . 通过添加类似于:

    /**
     * @return Response
     * @Route("/")
     */
    public function showAction() : Response
    {
        $datetime = new \DateTime();
        $date = $datetime->format('Y-m-d');
    
        return $this->testAction($date);
    }
    

相关问题