2014-12-13 30 views
5

如題延伸控制器,我會在Yii中2, 創建自定義控制器,並覆蓋核心控制器和波紋管是我的代碼。 /創建BaseController,我把這個文件放在root/components中。/如何創建BaseController Yii中2

namespace yii\base; 
use Yii; 
class BaseController extends \Controller{ 
    public function init() { 
     parent::init(); 
    } 
} 

/* Extends BaseController.*/ 
namespace app\components; 
use Yii; 
class UsersController extends \BaseController 
{ 
    /* more function is here.*/ 
    public actionIndex(){ 
     echo _FUNCTION_; 
    } 
} 

我改變更多的方式,但是這不是作品,plz幫助我。謝謝大家。

回答

15

你應該首先閱讀namespaces in PHP,然後學習一下關於Yii 2使用名稱空間的風格以及它在你使用的特定應用程序(基本/高級)中的組織方式。

什麼樣的功能,你想添加到您的控制器?大多數情況下,最好重寫特定的控制器(例如對於web,它將是yii\web\Controller),而不是基類。

假設你正在使用的基本應用,代碼應該是這個樣子:

BaseController

namespace app\components; 

class BaseController extends \yii\web\Controller 
{ 
    public function init() 
    { 
     parent::init(); 
    } 
} 

UserController的

namespace app\controllers;  

class UserController extends \app\components\BaseController 
{ 
    public actionIndex() 
    { 
     // ... 
    } 
} 

注意如何UserController正在擴展您的自定義BaseController。如果您製作您應用的控制器的所有擴展BaseController,則您可以在所有應用的控制器中擁有相同的功能/功能。

爲什麼?假設你想要你的整個frontend需要登錄。通常,您必須手動修改每個控制器中的規則。您可能BaseController中聲明規則以使所有內容都需要登錄,並排除login,error,signup以及您需要允許公共訪問的任何其他頁面。

別的東西新人Yii2應該知道。在「高級」模板中,您實際上有多個應用程序。 「前端」和「後端」是他們自己的應用程序。實際上,您可以複製「前端」(或「後端」)目錄並將其命名爲「主要」,並擁有第三個應用程序(只需搜索並重命名「前端」的所有實例爲「主要」 ,您可以複製的前端,將其命名爲「mainsite」並修改它以滿足您的需求,所以它的文件可以通過init合併如果需要的話。你還需要編輯environments/index.php添加您自己的初始化環境。

「控制檯「實際上也是一個應用程序,但不是用於Web訪問,而是用於通過命令行訪問,通常用於處理cron作業或修剪舊數據等自己的目的。也許你提供虛擬主機,在」控制檯「是你可以添加的地方代碼來創建他們自己的託管帳戶。我很少使用控制檯,但也可以是有用的。

主要用於創建需要爲網站執行的後臺和維護任務。

我想提的最後一件事,就是你可以創建自己的應用程序不過你想要的! Yii2框架不是您的basicadvanced應用程序,它實際上在您的vendor目錄(通過Composer安裝)內:)您正在使用的文件實際上只是Yii爲您鋪設東西的方式。遵循他們所做的事情,並且可以根據需要創建自己的文件結構。你可以取消它,並從頭開始創建你自己的Yii應用程序(根本不用先進的或基本的!)。 不要收縮到basicadvanced

+1

哦,謝謝你。我爲此付了1天的時間。現在它工作。 愛你。 ^^ _ – 2014-12-14 00:35:48

+3

@NguyễnThànhBồi接受這個答案! – robsch 2015-03-03 12:27:31

+0

在高級模板中,您的BaseController命名空間應該是:namespace backend \ controllers;或名稱空間前端\控制器;取決於BaseController的位置。 – Laith 2015-10-31 12:54:53