我使用Symfony2的一個網站,我想有這取決於用戶的完全不同的路由文件(IP地址,...)動態更改路由器文件的Symfony2
我的第一個想法就是加載不同環境如果用戶的功能,但內核(所以環境設置)設置在事件之前,我認爲這個解決方案不能工作。
我想保持相同的URL,在其他網站沒有重定向...
如果您有任何想法,謝謝:)
我使用Symfony2的一個網站,我想有這取決於用戶的完全不同的路由文件(IP地址,...)動態更改路由器文件的Symfony2
我的第一個想法就是加載不同環境如果用戶的功能,但內核(所以環境設置)設置在事件之前,我認爲這個解決方案不能工作。
我想保持相同的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;
}
}
services:
app.routing_loader:
class: AppBundle\Routing\AdvancedLoader
arguments: [@request=]
tags:
- { name: routing.loader }
app_advanced:
resource: .
type: advanced_extra
你可以使用PHP文件作爲主路由器,然後根據根據您的條件(用戶,IP,...),您可以加載動態路由或加載單個路由文件。
去通過http://symfony.com/doc/current/book/routing.html你可以設置你的路由是這樣的:
# app/config/config.yml
framework:
# ...
router: { resource: "%kernel.root_dir%/config/routing.php" }
在routing.php文件可以導入靜態文件(YML,XML),或者只登記路線,直接出現(這一切根據你的具體情況)。
它的工作原理,但該路由直接添加到緩存中,但可以使用http://symfony.com/doc/current/cookbook/configuratio禁用緩存N/apache_router.html – Ajouve