2016-07-15 15 views
1

Ich habe einen Controller im Ordner Komponenten/Test/Test/Controller namens MyController. Wenn ich den Namespace als "namespace app \ components \ test \ test" einstelle, versuche ich den Controller aufzurufen, wenn "Page Not Found" angezeigt wird.Yii2. Einen benutzerdefinierten Controller-Namespace einrichten

Ich habe gelesen und ich weiß, dass standardmäßig Yii2 Namespace für Controller auf "App \ Controller" setzt.

wissen auch, dass Sie Namespace für alle Steuerungen von Config ändern können:

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

Aber ich wollte nur für einen Controller ändern, nicht für alle. Etwas ähnlich wie Module, dort können Sie tun:

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

Ich habe gerade etwas „controllerMap“, vielleicht könnte dies eine Lösung genannt wird? irgendwelche Ideen?

Beispiel Ich habe innen "Komponenten" (Grund Vorlage) einen Controller LocationController mit diesem Inhalt erstellt:

namespace app\components; 

use yii\web\Controller; 

class LocationController extends Controller { 

    public function actionAdd() { 

     return "hola1"; 
    } 

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

} 

Wenn ich einen Link Yü erstellt :: $ app-> urlManager-> createAbsoluteUrl ("Ort/Hinzufügen"); und klicke darauf. Ich bekomme den Fehler "Seite nicht gefunden".

UPDATE Ich habe festgestellt, dass möglich ist, Klassen zu classMap hinzufügen, aber nicht sicher, wo es platzieren:

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

den Trick Vielleicht tun könnte?

+0

Sie einen Tippfehler Namespace app \ Komponenten \ test/test – scaisEdge

+0

Danke, habe ich es einfach beheben (es war ein Typ auf die Frage nur), irgendwelche Ideen wie kann es gemacht werden? – Eduardo

+0

Sind Sie sicher, dass Sie die richtige ControllerAction aufrufen? .. bitte geben Sie die URL an .. – scaisEdge

Antwort

0

über Ihr „Nicht gefunden“ Problem, Ihre controllerNamespace und Namespace muss den vollständigen Pfad des Controllers haben, in Ihrem Fall:

app\modules\test\test\controllers 

Nun, ich nur den Weg für einen einzigen Controller zu ändern denken kann ein Modul in Ihrer Anwendung zu schaffen (wie Sie erwähnt):

<?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 
    } 
} 

und das Modul in der Config hinzu:

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

EDIT

Sie auch in Ihrer Konfigurations hinzufügen:

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

Danke für Ihre Antwort. Mein Controller ist nicht in einem Modul. Das war ein Beispiel dafür, wie es in Modulen gemacht wird. Bitte sehen Sie meine aktualisierte Frage mit einem Beispiel. – Eduardo

+0

Ich kann falsch liegen, aber ich denke, Sie verwirren [Komponenten] (http://www.yiiframework.com/doc-2.0/guide-structure-application-components.html) mit [Module] (http: // www .yiiframework.com/doc-2.0/guide-structure-modules.html). Die Definition von Modulen besagt: "Module sind eigenständige Softwareeinheiten, die aus Modellen, Ansichten, Controllern und anderen unterstützenden Komponenten bestehen." Während Components 'verschiedene Dienste für die Verarbeitung von Anfragen bereitstellen. – Clyff

+0

Eigentlich war das nur zum Beispiel, ich versuche es tatsächlich für ein Widget, das ich in Komponenten habe;). Ich frage mich, ob das möglich ist oder nicht – Eduardo