我有一个使用 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/