2016-11-22 29 views
0

是否可以從後端運行前端控制器的動作?如何從yii2的後端運行前端控制器的動作

如果被調用的動作在後端,此代碼也可以工作。我可以在runAction中指定控制器/操作是在前端嗎?

Yii::$app->runAction('controller/action') 

而且我是試過類似

$c=new controller(); 
$s->action(); 

太多,但現在看來,這不是工作壓力太大。 //新的控制器()需要一些參數,我不知道它是什麼。

回答

1

yii\base\Application對象有一個公共屬性controllerNamespace,默認爲app\\controllers。您需要相應地更改它以更改默認控制器名稱空間。

更改命名空間在行動:

的Yii :: $ APP-> controllerNamespace = '前端\控制器',並使用runAction

+0

謝謝你@Cap,工作完美。正確的命名空間是'backend \ controllers'與\ – user677900

+0

對不起,我從手機寫的 – Cap

0

一種方式可能是這樣的。

在你的後臺應用程序的配置,你可以創建一個額外的「UrlManager」組件 名稱,如:urlManagerFrontEnd

return [ 
     'components' => [ 
      'urlManager' => [ 
       // here is your backend URL rules 
      ], 
      'urlManagerFrontEnd' => [ 
       'class' => 'yii\web\urlManager', 
       'baseUrl' => 'http://your_path/frontend/web/index.php', 
       'enablePrettyUrl' => true, 
       'showScriptName' => false, 
      ], 

     ], 
    ]; 

那麼你應該調用以下組成前端網址:

Yii::$app->urlManagerFrontEnd->createUrl(); 

和添加控制器/您喜歡的動作

請注意

runAction() 

運行此控制器與所述指定的操作ID和 參數內的動作。

http://www.yiiframework.com/doc-2.0/yii-base-controller.html#runAction()-detail

這意味着無法運行其他控制器或其他應用程序的作用..

如果你需要服務的話,你必須配置的REST類型的,或者你只是需要一個重定向可以使用重定向

+0

感謝,但createurl()返回一個字符串,如「前臺/控制器/行動'。在runAction()中使用此字符串也不起作用。 – user677900

+0

你可以使用重定向.. – scaisEdge

+0

實際上我需要runAction()在後臺控制器中的結果。我想知道如何重定向可以幫助? – user677900

相關問題