Php Yii2如何更改所调用的操作,或将内部操作重定向到另一个操作

Php Yii2如何更改所调用的操作,或将内部操作重定向到另一个操作,php,redirect,yii,routing,yii2,Php,Redirect,Yii,Routing,Yii2,我希望在控制器内部和函数init(){}内更改调用的操作(请求的操作)。 我的意思是,如果有人调用“www.mywebsite.com/myctrl/action1”,我希望在init函数中调用action2,而无需重定向页面和更改url 2-是否可以在init函数内做出响应,并停止调用请求的操作 致意 Wael为什么不在配置文件中捕获URL并手动将其重定向到新操作?它应该工作得很好,它会完全实现你想要的 我知道这不是你想要的方式,但优势是什么 编辑: 在你告诉我你需要做什么之后,你真的不应该

我希望在控制器内部和函数init(){}内更改调用的操作(请求的操作)。 我的意思是,如果有人调用“www.mywebsite.com/myctrl/action1”,我希望在init函数中调用action2,而无需重定向页面和更改url

2-是否可以在init函数内做出响应,并停止调用请求的操作

致意
Wael

为什么不在配置文件中捕获URL并手动将其重定向到新操作?它应该工作得很好,它会完全实现你想要的

我知道这不是你想要的方式,但优势是什么

编辑:

在你告诉我你需要做什么之后,你真的不应该这样做。您应该使用AccessControl或控制器的beforeAction


使用第二个选项,您可以抛出一个错误,让Yii为您处理它。第一个做的是类似的事情…

这个问题通常通过使用Apache或类似的工具来解决。根本不需要更改您的应用程序。它比yii2提供的灵活得多,而且速度更快,因为web服务器是以本机方式进行的


该技术通常在迁移功能、支持不同环境、共享资源等时使用。

可能重复我已经尝试过的Yii:$app->runAction('new\u controller/new\u action',$params);但是你知道如何用模块来调用它吗,我的意思是如果你的代码是作为模块工作的:“www.mywebsite.com/mymodule/myctrl/action1上述问题也没有解决。可能是OP没有接受。这并不意味着答案是错误的。您的控制器在同一个模块中吗?我将此模块作为API编写,因此我希望在请求未经身份验证时显示特定的错误消息。请参阅我的编辑,使用访问控制或预操作执行此操作。抛出异常,这就是它们的用途。谢谢,我发现beforeAction是优雅的,带有错误处理。它现在确实有帮助,但是如果不重定向页面,就不可能在执行过程中调用另一个操作?我在1点上做了,但很快就删除了它。感觉就像是一个丑陋的黑客。您必须在yii应用程序中更改控制器id。。。还有一些根本不需要的东西。