【问题标题】:Yii2 how to change called action, or redirect action internal to another actionYii2 如何更改被调用的动作,或将内部动作重定向到另一个动作
【发布时间】:2015-08-09 11:53:36
【问题描述】:

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

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

最好的问候 韦尔

【问题讨论】:

  • 我已经试过 Yii::$app->runAction('new_controller/new_action', $params);但是您知道如何使用模块调用它吗?我的意思是,如果您的代码作为模块工作:“www.mywebsite.com/mymodule/myctrl/action1
  • 上述问题也没有解决。
  • 可能是 OP 没有接受它。这并不意味着答案是错误的。
  • 你的控制器在同一个模块中吗?

标签: php redirect yii routing yii2


【解决方案1】:

为什么不直接捕获配置文件中的 URL 并手动将其重定向到新操作?它应该可以正常工作,并且可以完全满足您的要求。

http://www.yiiframework.com/doc-2.0/guide-runtime-url-handling.html

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

编辑:

在你告诉我你需要做什么之后,你真的不应该这样做。您应该使用控制器的 AccessControl http://www.yiiframework.com/doc-2.0/yii-filters-accesscontrol.html 或 beforeAction http://www.yiiframework.com/doc-2.0/yii-base-controller.html#beforeAction()-detail

使用第二个选项,你可以抛出一个错误,让 Yii 为你处理它。第一个做同样的事情......

【讨论】:

  • 我正在将此模块编写为 API,因此我想在请求未通过身份验证时显示特定的错误消息。
  • 查看我的编辑,使用访问控制或 beforeAction。抛出异常就是它们的用途。
  • 谢谢,我发现 beforeAction 很优雅,带有 ErrorHandling。它现在实际上有帮助,但是如果不重定向页面就不可能通过执行调用另一个动作?
  • 我确实在 1 点做了,但很快就删除了。感觉就像一个丑陋的黑客。您必须更改 yii 应用程序中的控制器 ID...以及其他一些根本不需要的东西。
【解决方案2】:

这个问题通常通过使用 Apache 的mod_rewrite 或类似的方法来解决。根本不需要更改您的应用程序。它比 yii2 提供的要灵活得多,而且速度会更快,因为 Web 服务器本身就是这样做的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    相关资源
    最近更新 更多