php - 动态更改路由器文件 Symfony2

标签 php symfony

我有一个使用 Symfony2 的网站,我希望有一个完全不同的路由文件,具体取决于用户(IP 地址,...)

我的第一个想法是根据用户的功能加载不同的环境,但是内核(因此环境设置)是在事件发生之前设置的,我认为这个解决方案行不通。

我想保留相同的 url,不在另一个网站上重定向 ...

如果你有任何想法,谢谢:)

最佳答案

您可以创建额外的加载程序,这将扩展您现有的加载程序,如 documentation .在你的情况下:

<?php


namespace AppBundle\Routing;

use Symfony\Component\Config\Loader\Loader;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\RouteCollection;

class AdvancedLoader extends Loader
{
    private $request;

    public function __construct(Request $request)
    {
        $this->request = $request;
    }

    public function load($resource, $type = null)
    {
        $collection = new RouteCollection();

        $ip = $this->request->getClientIp();

        if($ip == '127.0.0.1'){
            $resource = '@AppBundle/Resources/config/import_routing1.yml';
        }else{
            $resource = '@AppBundle/Resources/config/import_routing2.yml';
        }

        $type = 'yaml';

        $importedRoutes = $this->import($resource, $type);

        $collection->addCollection($importedRoutes);

        return $collection;
    }

    public function supports($resource, $type = null)
    {
        return 'advanced_extra' === $type;
    }
}

AppBundle/Resources/config/services.yml

services:
   app.routing_loader:
       class: AppBundle\Routing\AdvancedLoader
       arguments: [@request=]
       tags:
           - { name: routing.loader }

应用程序/配置/routing.yml

app_advanced:
    resource: .
    type: advanced_extra

关于php - 动态更改路由器文件 Symfony2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30733979/

相关文章:

php - Laravel 查询生成器中 FORCE INDEX FOR JOIN 的等价物

javascript - 禁用所选的下拉列表值并获取下拉列表的下一个值

Symfony2 ACL 访问多个用户的多个对象

jquery - 使用户能够拥有自定义配置文件的最佳方式 - 例如 about.me 个人资料

php - 如何从 php 将唯一的确认码插入到电子邮件中

PHP get_defined_vars() 不会在函数内部打印超全局变量

php - 如何在 PHP 中动态定义一个变量

symfony - FOSUserBundle "Register"路由重定向到 "Login"路由

php - symfony的测试和浏览器有什么区别

php - 函数中的 symfony 重定向