Symfony在哪里初始化路由?(路由.Yml或内部控制器)


Symfony where to initialize routes? (routing.yml or inside controller)

在smyfony的路由页面上有一个路由示例(第一个)。现在他们给了我们4种代码选项(annotation, YAML, XML, PHP)。区别在哪里?也许你可以看看我的Controller + Route

控制器看起来像这样:

<?php
    namespace AppBundle'Controller;
    use Symfony'Bundle'FrameworkBundle'Controller'Controller;
    use Sensio'Bundle'FrameworkExtraBundle'Configuration'Route;
    class ToDoListController extends Controller
    {
        /**
         * @Route("/ToDoList", name="ToDoList")
         */
        public function showToDoList()
        {
        }
    }
?>

现在我也将这条路线添加到routing.yml中。

ToDoList:
    path: /Aufgabenliste
    defaults: {_controller: AppBundle'Controller  'ToDoListController::showToDoList}

正确吗?路径呢?在symfony页面的第一个例子中,他们写的是defaults: { _controller: AppBundle:Blog:show },但在描述中他们写的是:

_controller字符串称为逻辑名。它遵循一个指向特定PHP类和方法的模式,在本例中是AppBundle'Controller'BlogController::listAction和AppBundle'Controller'BlogController::showAction方法。

好的。在Symfony中,你可以选择不同的路由方法。例如,您可以通过注释或yml来实现这一点(我以前使用yml,但现在我改用注释)。唯一的区别是……文件格式;)例如,我非常喜欢使用注释,因为与其在一个文件中有10亿个条目,不如将每个路径都放在它所指向的代码旁边。在这一点上,这取决于你更喜欢什么。然而,我认为使用注释被认为是一个很好的实践。

<?php
    namespace AppBundle'Controller;
    use Symfony'Bundle'FrameworkBundle'Controller'Controller;
    use Sensio'Bundle'FrameworkExtraBundle'Configuration'Route;
    class ToDoListController extends Controller
    {
        /**
         * @Route("/ToDoList", name="ToDoList")
         */
         public function showToDoList()
         {
         }
    }  
?>

上面的代码没问题——您使用了所需的名称空间并创建了正确的注释。所有这些都必须在你正在开发的bundle中完成。你还得去app/config/routing。然后像这样写:

YourBundleName:
    resource: "@YouBundle/Controller/"
    type:     annotation

当然这只是一个例子,你需要根据你的需要进行调整。这样你就是在告诉Symfony你想要使用注解