当前位置: 首页 > 面试题库 >

Symfony2路由-路由子域

强阳曜
2023-03-14
问题内容

有没有办法在 Symfony2中 设置基于主机名的路由?

在官方文档中没有找到关于此主题的任何信息。
http://symfony.com/doc/2.0/book/routing.html

我想基于给定的主机名路由请求:

foo.example.com  
bar.example.com  
{{subdomain}}。example.com

因此,从本质上讲,控制器将获得作为参数传递的当前子域。

$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
    ':username.users.example.com',
    array(
        'controller' => 'profile',
        'action'     => 'userinfo'
    )
);
$plainPathRoute = new Zend_Controller_Router_Route_Static('');

$router->addRoute('user', $hostnameRoute->chain($plainPathRoute));

我希望这是可能的,而我只是以某种方式错过了它。
提前致谢!


问题答案:

这是我的解决方案:

config.yml内部应用程序目录中添加以下行:

services:
   kernel.listener.subdomain_listener:
       class: Acme\DemoBundle\Listener\SubdomainListener
       tags:
           - { name: kernel.event_listener, event: kernel.request, method: onDomainParse }

然后将类创建SubdomainListener.php为:

<?php

namespace Acme\DemoBundle\Listener;

use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\Event;

class SubdomainListener
{
   public function onDomainParse(Event $event)
   {
       $request = $event->getRequest();
       $session = $request->getSession();

       // todo: parsing subdomain to detect country

       $session->set('subdomain', $request->getHost());
   }
}


 类似资料:
  • 例如:产品详细信息页面可能有一个标签式导航部分,默认显示产品概述。 当用户单击“技术规格”选项卡时,该部分将显示规格。 如果用户点击ID为3的产品,我们要显示产品详细信息页面,其中包含概述: 当用户点击 “Technical Specs”: localhost:3000/product-details/3/specs overview 和 specs 作为 product-details/:id的

  • 我有一个名为Dashboard的父组件,它被呈现为路由,如下所示: 我试着嘲笑每个人在嵌套路由上的解决方案,但我似乎无法解决我的问题。

  • 我有一个更新网站的任务。本网站使用Symfony2。我试着在我的localhost上模拟网站。 当我尝试使用空方向路径(REQUEST_URI)到达索引页时,Symfony2返回的路由。我尝试运行的url是。 当我使用(例如)时,它也不起作用 怎么了? app/config/routing。yml: app/配置/routing_dev.yml: src/AppBundle/Resources/c

  • 本文向大家介绍对angular4子路由&辅助路由详解,包括了对angular4子路由&辅助路由详解的使用技巧和注意事项,需要的朋友参考一下 子路由学习笔记: 子路由和路由一样的配置方法,都是声明好路由的入口,路由的路径,路由的出口,不一样的是自路由是嵌套在副路由里面的并且由children表明这是子路由且可以无限循环嵌套。 路由入口:需要注意的是在子路由的入口处不能再用/来跟路径名,/会告诉ang

  • 例如,我们可能希望一些路线只有在用户登录或接受条款和条件后才可访问。 我们可以使用路由哨兵来检查这些条件并控制对路由的访问。 路由哨兵还可以控制用户是否可以离开某个路由。 例如,假设用户已将信息键入页面上的表单,但尚未提交表单。 如果这时离开页面,他们将丢失信息。 如果用户尝试离开路由而不是提交或保存信息,我们可以提示用户。 Angular 提供了五种路由拦截哨兵: CanActive 激活拦截

  • 每个路由可以有不同的属性; 一些常见的属性是: path - 应用程序在特定路由上时在浏览器中显示的URL component - 当应用程序在特定路由上时要呈现的组件 pathMatch - 默认为’prefix’的可选属性。 确定是匹配完整的网址还是仅匹配开头。 当定义一个具有空路径字符串的路径设置pathMatch为’full’时,否则它将匹配所有路径。 children - 表示此路由的子