你應該首先閱讀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框架不是您的basic
或advanced
應用程序,它實際上在您的vendor
目錄(通過Composer安裝)內:)您正在使用的文件實際上只是Yii爲您鋪設東西的方式。遵循他們所做的事情,並且可以根據需要創建自己的文件結構。你可以取消它,並從頭開始創建你自己的Yii應用程序(根本不用先進的或基本的!)。 不要收縮到basic
或advanced
!
哦,謝謝你。我爲此付了1天的時間。現在它工作。 愛你。 ^^ _ – 2014-12-14 00:35:48
@NguyễnThànhBồi接受這個答案! – robsch 2015-03-03 12:27:31
在高級模板中,您的BaseController命名空間應該是:namespace backend \ controllers;或名稱空間前端\控制器;取決於BaseController的位置。 – Laith 2015-10-31 12:54:53