2013-11-28 26 views
5

我創建了一個is_home_page()函數來檢測用戶是否在主頁上,但我不確定我應該把它放在哪裏,以便我可以用在所有視圖和主題上?Yii在哪裏放置自定義全局函數?

function is_home_page() { 
    $app = Yii::app(); 
    return $app->controller->route == $app->defaultController; 
} 

回答

12

創建一個文件MyClass.php內部組件

你可以寫入裏面的靜態功能,如

public static function is_home_page() { 
     $app = Yii::app(); 
     return $app->controller->route == $app->defaultController; 
    } 

可以從任何可以訪問其中類似的控制器,型號或查看下面

MyClass::is_home_page(); 

希望這將有助於你寫在全球任意數量的功能,並從任何地方

+0

的組件中,不必在'config/main.php'中編輯任何東西!謝謝! – user2636556

6

使文件helpers.php並把它內部的元件保護
       文件夾

| -components
                | -helpers.php

而且在你的配置main.php文件

require_once(dirname(__FILE__) . '/../components/helpers.php'); 

的頂部添加此行,內部的helpers.php寫你的函數

<?php 
    function is_home_page() { 
     $app = Yii::app(); 
     return $app->controller->route == $app->defaultController; 
    } 

?> 

現在,這個功能是在整個應用程序直接訪問調用is_home_page()任何地方,它會返回你的價值。

+0

我應該爲它設置一個別名? 'Yii :: setPathOfAlias('bootstrap',dirname(__ FILE__)。'/../ components/helpers.php');'? – user2636556

+1

沒有必要,如果可以簡單地完成,那麼你爲什麼會這樣做。 –

+0

謝謝,非常有用) –

1

您可以使用全部助手方法創建類Globals。例如:

class Globals{ 
     public function is_home_page() { 
      $app = Yii::app(); 
      return $app->controller->route == $app->defaultController; 
     } 
    } 

main.phpcomponents集:

'globals' => array(
     'class' => 'alias.to.location.Globals' 
) 

比在代碼中,你可以使用這個Yii::app()->globals->is_home_page()

+0

在'protected/components/Helpers.php'對嗎?和'alias.to.location.Globals'會是'application.components.Helpers'? – user2636556

+1

爲什麼不把它放在main.php的''import'=> array()'中? – user2636556

+0

更好地爲文件設置名稱爲Globals.php(文件名必須等於類的名稱)。比如果類將在'protected/components/Globals.php'中,而不是別名'application.components。Globals' – CreatoR