如何使用YII检查当前页面是否为frontpage?

如何使用YII检查当前页面是否为frontpage?,yii,Yii,Drupal有一个名为“”的函数。YII是否有类似的方式来处理导航 以我的经验,Yii中没有这样的功能。但是,您可以检索以下内容: 基本url:Yii::app()->request->baseUrl 当前URL:Yii::app()->request->requestUri。 当前页面控制器具有Yii::app()->getController()->getAction()->controller->id 有了这些API,应该可以确定当前页面是否是头版。根据我的经验,Yii中没有这样的功能

Drupal有一个名为“”的函数。YII是否有类似的方式来处理导航

以我的经验,Yii中没有这样的功能。但是,您可以检索以下内容:

  • 基本url:
    Yii::app()->request->baseUrl
  • 当前URL:
    Yii::app()->request->requestUri。
  • 当前页面控制器具有
    Yii::app()->getController()->getAction()->controller->id

有了这些API,应该可以确定当前页面是否是头版。

根据我的经验,Yii中没有这样的功能。但是,您可以检索以下内容:

  • 基本url:
    Yii::app()->request->baseUrl
  • 当前URL:
    Yii::app()->request->requestUri。
  • 当前页面控制器具有
    Yii::app()->getController()->getAction()->controller->id

使用这些API,应该可以确定当前页面是否是头版。

不幸的是,不是。虽然拼凑这些数据所需的信息是可用的,但这样做确实比应该的更痛苦

首先,首页是由属性定义的,该属性可以在最终指南中进行配置。但这里有一个大问题:
defaultController
实际上可以是以下任何一种:

  • 裸控制器名称,例如
    站点
  • 模块/控制器对,例如
    模块/站点
  • 控制器/动作对,例如
    站点/索引
  • 模块/控制器/动作元组,例如
    module/site/index
  • 如果您已将
    defaultController
    指定为#4(如果您的应用程序不包含任何模块,则与#3相同),则一切都很简单:

    function is_home_page() {
        $app = Yii::app();
        return $app->controller->route == $app->defaultController;
    }
    
    问题是,如果
    defaultController
    被指定为#1或#2,那么您必须检查大量运行时信息,将其转换为#3或#4(视情况而定),以便运行相等性检查

    Yii当然已经包含了可以做到这一点的代码:该方法可以接受
    defaultController
    的任何有效格式,并将其解析为控制器/动作对(如果适用,控制器依赖于模块)。但是看着来源并不能让你期待地微笑

    总而言之:您可以假设
    defaultController
    始终是完全指定的,并使用一行代码完成任务,或者从
    createController
    借用代码来确定
    defaultController
    指向的确切位置(然后使用这一行代码检查是否相等)


    我不建议研究基于URL的解决方案,因为路由的全部意义在于不同的URL可以指向相同的内容——如果你这样做,就永远无法确保你得到了正确的结果。

    不幸的是,没有。虽然拼凑这些数据所需的信息是可用的,但这样做确实比应该的更痛苦

    首先,首页是由属性定义的,该属性可以在最终指南中进行配置。但这里有一个大问题:
    defaultController
    实际上可以是以下任何一种:

  • 裸控制器名称,例如
    站点
  • 模块/控制器对,例如
    模块/站点
  • 控制器/动作对,例如
    站点/索引
  • 模块/控制器/动作元组,例如
    module/site/index
  • 如果您已将
    defaultController
    指定为#4(如果您的应用程序不包含任何模块,则与#3相同),则一切都很简单:

    function is_home_page() {
        $app = Yii::app();
        return $app->controller->route == $app->defaultController;
    }
    
    问题是,如果
    defaultController
    被指定为#1或#2,那么您必须检查大量运行时信息,将其转换为#3或#4(视情况而定),以便运行相等性检查

    Yii当然已经包含了可以做到这一点的代码:该方法可以接受
    defaultController
    的任何有效格式,并将其解析为控制器/动作对(如果适用,控制器依赖于模块)。但是看着来源并不能让你期待地微笑

    总而言之:您可以假设
    defaultController
    始终是完全指定的,并使用一行代码完成任务,或者从
    createController
    借用代码来确定
    defaultController
    指向的确切位置(然后使用这一行代码检查是否相等)

    我不建议研究基于URL的解决方案,因为路由的全部意义在于不同的URL可以指向相同的内容——如果你这样做,就永远无法确保你得到了正确的结果。

    另一个简单的想法:

    在您的操作(用于显示“主页面”)中,您可以在其视图中使用脚本设置变量:

    Yii::app()->getClientScript()->registerScript("main_screen",
       "var main_front_page = true;",CClientScript::POS_BEGIN);
    
    将该代码放在“主视图”中(其余视图页面没有这段代码)。 因此,当您需要检查某个页面是否为“主页面”时,可以使用javascript检查该页面,查询:

    if(main_front_page){..do something..}.
    
    如果您需要识别php中的主页(在服务器端),请使用Jon提出的方法。

    另一个简单的想法:

    在您的操作(用于显示“主页面”)中,您可以在其视图中使用脚本设置变量:

    Yii::app()->getClientScript()->registerScript("main_screen",
       "var main_front_page = true;",CClientScript::POS_BEGIN);
    
    将该代码放在“主视图”中(其余视图页面没有这段代码)。 因此,当您需要检查某个页面是否为“主页面”时,可以使用javascript检查该页面,查询:

    if(main_front_page){..do something..}.
    

    如果需要识别php中的主页(在服务器端),请使用Jon提出的方法。

    另一种解决方案,基于控制器的常用方法:

    您的控制器所有这些控制器都必须从CController扩展,