当前位置: 首页 > 知识库问答 >
问题:

Symfony 2动态加载路由

丁绪
2023-03-14

我将在我的Symfony 2应用程序中创建一个模块系统。每个模块都是一个捆绑包。

我不知道如何我可以动态(在我的服务代码)加载路由文件(例如。Acme某些ModuleBundle/Resources/config/routing.yml),并使用一些前缀(或主机)应用它们。就像在app/config/routing.yml中嵌入代码一样:

berg_applications:
    resource: "@AcmeSomeModuleBundle/Resources/config/routing.yml"
    host: foobar.com

有什么解决办法吗?

共有2个答案

太叔炎彬
2023-03-14

如果您对每个模块都采用真正的捆绑方法,那么完成您尝试的任务的最简单方法就是使用JMS安全额外捆绑,并使用基于属性的路由

在您的composer.json文件中,添加以下内容:“需要”:{..."jms/security-out-bundle":"1.5。*",

使用更新您的composer文件

php composer.phar update

然后在BundleName/Resources/config/routing.yml文件中执行以下操作:

some_name:
    type:     annotation
    resource: "@SomeBundle/Controller"

最后,对于控制器中的每个动作,用@Route属性装饰它:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;

/**
* @Route("/SomeBundle/SomeController")
*/
class SomeController extends Controller {
    /**
    * @Route("someAction", name="myAction")
    * @Method("GET") OR
    * @Method({"GET", "POST"})
    */
    public function someAction() {
    }
}

JMS包中的一些其他属性也让事情变得非常好。例如,我经常在操作中使用@Template属性。这意味着我不再需要做:

public function recentListAction() {
    ...
    return $this->render(
        'AcmeArticleBundle:Article:recentList.html.twig',
        array('articles' => $articles)
    );
}

我可以简单地做到:

/**
* @Route("/Articles/List")
* @Template()
*/
public function recentListAction() {
    ...
    return array('articles' => $articles);
}

只要我有一个Resources/view/ControlllerName/recentList.html.twig文件,所有内容都会自动编织在一起。

艾心远
2023-03-14

您需要自定义路由加载程序:http://symfony.com/doc/current/cookbook/routing/custom_route_loader.html

对于一个项目,我必须构建路由加载器,通过CURL从远程URL获取路由加载器,它工作得很好。

文档非常清晰,当您查看示例时,您很容易自己构建一个文档。基本上,关键是:

  • 定义路由资源时键入。您应该创建自定义类型,以便路由加载器识别它并将其用于处理。
  • ::load()方法。

若你们遇到任何具体问题,不要犹豫,在评论中发表问题。基本上,您的路由器阅读器将在其load方法中接收“resource”,并应尽其所能向路由器添加新的Route

 类似资料:
  • 本文向大家介绍怎样动态加载路由?相关面试题,主要包含被问及怎样动态加载路由?时的应答技巧和注意事项,需要的朋友参考一下 vue-router的addRoutes方法

  • 本文向大家介绍vue addRoutes路由动态加载操作,包括了vue addRoutes路由动态加载操作的使用技巧和注意事项,需要的朋友参考一下 需求:增加权限控制,实现不同角色显示不同的路由导航 思路:每次登陆后请求接口返回当前角色路由 核心方法:vue-router2.2.0的addRoutes方法 + vuex 以下是我实现的获取菜单路由的方法,我将该方法的调用放在首页组件的生命钩子中,即

  • 问题内容: 如何从库本身中获取共享库的路径? 换句话说,假设使用来加载库X ,如何从库本身内部访问用于加载所述库的路径? 请注意,我不能首先将这个库加载到该库中。 更新: 这是使用静态变量的方法: 问题答案: 动态链接器实际上搜索几个位置以找到每个动态库。其中包括(来自man ld.so): 环境变量给定的路径 烘焙到二进制文件中的路径将加载条目下的库 缓存文件/etc/ld.so.cache /

  • 问题内容: 我正在使用express在Node.js中做一个项目。这是我的目录结构: 该目录包含许多与API相关的JS文件。我需要做的是建立一个挂钩系统,每当从快速HTTP服务器请求一个API函数时,它就会执行相应的API处理程序中指定的任何操作。这可能令人困惑,但希望您能理解。 Larry通过POST发送请求以获取用户详细信息。 服务器查找以查找与该请求关联的功能。 服务器执行操作并将数据发送回

  • 问题内容: 是否可以基于路由组动态加载控制器,js文件和模板?伪代码不起作用: 我已经看到了很多这样的问题,但是没有一个问题基于路由组加载js文件/控制器。 问题答案: 我设法解决了受@ calebboyd,http : //ify.io/lazy-loading-in-angularjs/ 和http://weblogs.asp.net/dwahlin/archive/2013/05/22/dy

  • 问题内容: 我正在尝试为我的网站创建页面主题功能。我想使用单独的CSS文件在页面上动态加载相应的主题。 我正在使用此代码: 效果很好,但是如果CSS文件未加载,它不会返回任何信息。 加载时,有什么方法可以捕捉吗?也许通过使用ajax? 问题答案: 加载CSS文件(或其任何其他更改)时,Internet Explorer会触发一个事件。其他浏览器不会触发任何事件,因此您将必须手动检查样式表是否已加载