2016-07-15 102 views
1

我在components/test/test/controllers文件夾中有一個名爲MyController的控制器。如果我將名稱空間設置爲「名稱空間應用程序\ components \ test \ test」,然後嘗試調用控制器,如果顯示「找不到頁面」。Yii2。設置自定義控制器名稱空間

我一直在閱讀,我知道默認情況下,Yii2將控制器的命名空間設置爲「app \ controllers」。

也知道,你可以更改命名空間從配置所有控制器:

'controllerNamespace' => 'app\\components\test...' 

但我只是想改變一個控制器並非對所有。類似的東西到模塊中,你可以這樣做:

$this->controllerNamespace = 'app\modules\test\test'; 

我剛剛發現有一種叫做「controllerMap」,也許這可能是一個解決方案嗎?有任何想法嗎?

我已經 「組件」(基本模板)與此內容控制器LocationController內部產生:

namespace app\components; 

use yii\web\Controller; 

class LocationController extends Controller { 

    public function actionAdd() { 

     return "hola1"; 
    } 

    public function actionRemove() { 
     return "hola2"; 
    } 

} 

當我創建的鏈接的Yii :: $ APP-> urlManager-> createAbsoluteUrl( 「位置/添加」);並點擊它我得到「頁面未找到」的錯誤。

UPDATE 我發現這是可能的類添加到類映射,但不知道在哪裏把它:

Yii::$classMap['app\components\LocationController'] = '..path.../components/LocaitonController.php' 

也許這可能做的伎倆?

+0

你有一個錯字命名空間的應用程序\分量\測試/測試 – scaisEdge

+0

謝謝,我只是修復它(這是一個類型上只有問題),任何想法如何完成? – Eduardo

+0

你確定你在調用正確的controllerAction嗎? ..請提供網址.. – scaisEdge

回答

0

關於你的「未找到」的問題,你的controllerNamespace和命名空間必須有控制的完整路徑,你的情況:

app\modules\test\test\controllers 

現在,改變路徑單個控制器我只能想到你的應用程序中創建一個模塊(如你所提到的)的:

<?php 

namespace app\modules\test\test; 

/** 
* module definition class 
*/ 
class Module extends \yii\base\Module 
{ 
    /** 
    * @inheritdoc 
    */ 
    public $controllerNamespace = 'app\modules\test\test\controllers'; 

    /** 
    * @inheritdoc 
    */ 
    public function init() 
    { 
     parent::init(); 

     // custom initialization code goes here 
    } 
} 

,並添加你的配置模塊:

$config = [ 
    ... 
    'modules' => [ 
     'module' => 'app\modules\test\test\Module' 
    ] 
]; 

編輯

您還可以添加在你的配置:

$config = [ 
    ... 
    'controllerMap' => [ 
     'location' => 'app\components\LocationController', 
    ], 
]; 
+0

感謝您的回答。我的控制器不在模塊中。這是關於如何在模塊中完成的一個示例,請參閱我更新的問題和示例。 – Eduardo

+0

我可能是錯的,但我認爲你[Module](http://www.yiiframework.com/doc-2.0/guide-structure-application-components.html)與[Modules](http:// www .yiiframework.com/DOC-2.0 /導向結構-modules.html)。模塊的定義指出:'模塊是由模型,視圖,控制器和其他支持組件組成的獨立軟件單元。雖然Components'爲處理請求提供不同的服務。 – Clyff

+0

其實這僅僅是爲了舉例的目的,我實際上正在嘗試做一個我有內部組件的小部件;)。只是想知道這是否可能 – Eduardo