在 beforeAction 中渲染视图时,在 Yii 中出现“标题已发送”错误

2024-04-08

我读过 Yii2 的处理程序,但我不知道如何在这种情况下正确使用它们。

基本上在我的SiteController, 我有:

class SiteController extends \app\components\Controller
{
    public function beforeAction($action)
    {
        // Makes some checks and if it's true, will render a file and stop execution of any action
        if (...)
            echo $this->render('standby');
            return false;
        }
        return true;
    }

    // All my other actions here
}

这似乎运行良好并停止执行,但是我得到了“标头已发送”render()行,就好像它正在执行重定向一样。

如果我写Yii::$app-end()代替return false,同样的事情发生。

如果我写exit();代替return false,没有显示异常,但调试面板没有显示,因为 Yii 没有正确终止。

我尝试删除回声$this->render(..)它会导致一个空页面,没有任何重定向,这似乎只是 Yii 抱怨我从控制器回显内容。

当然我不能返回结果render()或返回true,因为它将执行页面的操作,我试图避免并在此结束。

我知道返回 falsebeforeAction()触发器EVENT_BEFORE_ACTION但我不知道我应该在哪里使用它。这事件文档 https://www.yiiframework.com/doc/guide/2.0/en/concept-events并没有真正帮助我。

那么有没有办法显示“备用”视图,阻止其他操作执行并避免从回显的错误消息Controller?

请注意,我试图完成这项工作,而不必在每个操作方法中重复代码来检查结果是否beforeAction()是假的。


从 Yii 2.0.14 开始,你不能在控制器中回显 - 响应必须由操作返回。如果你想生成响应beforeAction()你需要设置Yii::$app->response组件而不是回显内容:

public function beforeAction($action) {
    // Makes some checks and if it's true, will render a file and stop execution of any action
    if (...) {
        Yii::$app->response->content = $this->render('standby');
        Yii::$app->response->statusCode = 403; // use real HTTP status code here

        return false;
    }

    return parent::beforeAction($action);
}

别忘了打电话parent::beforeAction($action)- 忽略它会导致意外且难以调试的行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 beforeAction 中渲染视图时,在 Yii 中出现“标题已发送”错误 的相关文章

  • Yii2 REST 查询

    嘿 我有一个 ProductController 它扩展了 yii rest ActiveController 问题是我如何通过 HTTP GET 请求进行查询 Like http api test loc v1 products sear
  • 即使登录成功,Yii::app()->user->isGuest 也始终返回 true

    我开始对已通过身份验证的用户和未通过身份验证的用户进行一些区分 为此 我正在使用 Yii app gt user gt id 但是 在确定的视图中 我输入了以下代码 无论我是否登录 成功 我总是收到
  • Yii2 环境文件夹背后的想法是什么以及如何使用它?

    我已经通读过 Yii2 文档好几次了 我也用谷歌搜索 但还没有找到任何有用的东西 问题是我不理解环境文件夹的概念 请让我解释一下 我可以在 Git 中使用分支 用于开发 登台和生产 local conf文件会被 Git 忽略 并且不会以任何
  • Kartik Select2 - 以编程方式更改多个

    我有一个 yii2 activeform 其中表单的功能可以根据表单中的其他内容进行更改 所以 我有一个俱乐部字段 在某些情况下可以是多个 但在其他情况下不能是多个
  • 如何获取Yii2和DbManager中特定角色的用户?

    如何在RBAC中获取Yii2和DbManager中特定角色的用户 请介绍一些用于用户管理和角色管理的API 我搜索并阅读Yii2 指南 http www yiiframework com doc 2 0 guide index html但我
  • 伊2。访问更高级别的文件夹

    简单的问题 我用Yii2高级模板 在apache I have DocumentRoot path www yii application1 frontend web 我怎样才能访问 www yii application1 uploads
  • 如何在 yii 的更新视图中加载多选列表框中选定的列表项?

    我有一个multiple select list box for Staff in Create Service Form 用于在创建新服务时选择多名员工 为此 我可以在一项服务上分配多名员工 I saved staff id字段为 mod
  • Bower/bower-asset 在 yii2 等 php 应用程序中扮演什么角色

    最近我部署了一些项目 例如trntv yii2 starter kit https github com trntv yii2 starter kit 等等 但所有应用程序都在 vendor bower 而不是 vendor bower b
  • mkdir():权限被拒绝

    我的服务器上的所有文件都有 777 PHP 5 4 无安全模式 网站可以在其他服务器上运行 这是 Yii 框架 mkdir Permission denied var www html project framework web CAsse
  • Yii2:如何使用 301 重定向旧 URL?

    由于 SEO 目的 我想将旧版本网站中的一些 URL 重定向到 Yii2 中的新版本 例如 about us php to about 我怎么做 我不能使用 htaccess 而且我不能使用urlManager规则 因为需要设置HTTP响应
  • Yii2:配置参数与 const/define

    我什么时候应该使用什么 我可以选择在index php入口脚本文件中定义常量 就像推荐的那样Yii2 指南 常量 http www yiiframework com doc 2 0 guide structure entry scripts
  • 如何跨多个域重用代码?

    我只是使用 Yii 框架构建了一个 CMS 框架 我想将 CMS 部署到多个域 home root www domain1 com home root www domain2 com home root www domain3 com ho
  • ActiveForm,用于字段损坏验证的自定义 ID

    我对 Yii2 还很陌生 并且遇到了下一个不愉快的问题 我在同一页面创建了两个表单 例如
  • Yii2如何检查两个模型是否已经链接

    我有两个通过连接表关联的模型 model gt link 是用于建立两个模型之间关系的方法 它基本上用两个模型的相应键填充连接表 如果两个模型已链接并且我尝试再次链接它们 则会出现错误 因为密钥对已存在于连接表中 然后我需要在尝试链接模型之
  • 如何访问小部件的属性

    我是 Yii 框架的新手 我正在尝试访问小部件的属性 比如说 CMenu 我想更改一些公共属性的值 如 activeCssClass firstItemCssClass lastItemCssClass htmlOptions 等 那么你怎
  • CGridView 使用 Tab 时过滤重复的 Ajax 请求

    在我的 Web 应用程序中 我使用选项卡并根据 Ajax 加载部分视图 所以有可能我确实加载了相同的内容CGridView多次 无需重新加载页面 如果发生这种情况 如果我使用 我会变成重复的 Ajax 请求CGridView过滤器 过滤器和
  • Yii CDBCommand getText 显示 SQL 中的所有变量

    我正在使用 Yii 的 Yii app gt db gt createCommand 来构建 SQL 查询 为了查看 Yii 生成的 SQL 代码 我使用 CDBCommand 的 getText 方法 问题是 当我在包含参数的 SQL 代
  • 如何将Stripe支付集成到Yii2中?

    我有以下代码 它运行时没有错误 但它不会将资金插入到 Stripe 服务器上 Stripe 库已正确安装 配置文件
  • codecept:未找到命令

    我全新安装了 Ubuntu 在安装 Yii2 等之后 我似乎无法再运行 codecept 了 我用的是Yii2 我需要在composer json 中使用最新的codecept 版本 该版本工作正常 但我似乎找不到一种方法来让代码接收再次运
  • Yii:如何用另一个模型数据填充选择输入?

    我正在玩一个小应用程序以学习使用 Yii 我创建了一个小型网络应用程序 其中包含 2 个模型 表 项目和任务 一对多关系 在模型类中正确配置 我现在尝试自定义任务 创建视图 用建议可用项目列表的选择框替换文本输入字段 我打开表单视图并尝试了

随机推荐

  • 套接字如何既可以连接又可以关闭?

    我正在使用 Java 套接字客户端 如果服务器仍然连接到我的客户端 但它没有发送对我的消息的响应 我最终会收到读取超时异常 在这种情况下 我想测试一下是否应该重新连接我的套接字 或者只是保留它并重新使用它 我使用这个条件 if socket
  • .htc 文件在旧版 IE 中是否是像 CSS3 那样的圆角的良好做法?

    我正在尝试使用 CSS3 制作带有圆角的简单 html 按钮 但对于 IE 我使用 htc 文件作为圆曲线 使用 htc 文件是好习惯还是坏习惯 我无法判断使用这个 html 文件 我的另一个担心是渐进增强是否允许使用 htc 文件 还请告
  • 用python计算时间序列数据的概率分布

    我有一个关于概率分布函数的问题我有一个时间序列数据 我想计算不同时间窗口内数据的概率分布 我开发了以下代码 但我找不到该函数的概率分布值 a pd DataFrame 0 0 21 660332407421638 20 5642894358
  • 如何在 RHEL 虚拟机上运行 minikube?

    有没有办法在 RHEL VM 虚拟机管理程序 上运行 Kubernetes minikube 或者还有其他方法可以使用单个虚拟机尝试 Kubernetes 吗 要在 RHEL CentOS VM 上运行 minikube 您需要在安装 mi
  • 在 CodeRush 中查找键绑定定义

    如果我部署了社区插件并在 CodeRush 中设置了键绑定 那么我现在如何找到我在选项对话框 树层次结构中归档它的位置 打开 CodeRush 选项屏幕 选择DevExpress 选项从菜单或点击Ctrl Shift Alt O 然后找到I
  • 尝试从私有实例调用模板方法时出现编译器错误[重复]

    这个问题在这里已经有答案了 如果您已经知道答案 这个问题只是另一个问题的重复 请注意我的后续问题 如果存在同名的不相关的全局模板函数 为什么不需要模板关键字 https stackoverflow com questions 2389249
  • 正则表达式失败时非常慢

    我有一个正则表达式 应该验证字符串是否由空格分隔的字符串组成 正则表达式工作得很好 好吧 它最后允许有一个空格 但这不是他的问题 但是当验证失败时需要很长时间 正则表达式如下 w 0 当尝试使用字符串进行验证时 this is SAMPLE
  • Rest 服务抛出异常:最佳处理方法

    我有一个休息服务 它会抛出异常 我想知道处理这个问题的最佳方法是什么 所以我有一个休息服务 它可以抛出用户定义的异常 我在 catch 块内捕获该异常并再次抛出该异常 并使用休息框架来捕捉这一点 对于非用户定义的异常也是如此 我认为这会很好
  • 为什么在 Java 中两个整数相除会返回 0.0? [复制]

    这个问题在这里已经有答案了 int totalOptCount 500 int totalRespCount 1500 float percentage float totalOptCount totalRespCount 为什么它总是返回
  • 如何向 UIAlertController 添加进度条?

    我想在 swift iOS 8 UIAlertController 中添加进度条 这可能吗 有没有办法继承 UIAlertController 并添加进度条并连接一些委托函数 thanks 如果您只需要一个进度条 只需将其添加为子视图 如下
  • 检查@@rowcount函数来确定行是否存在可以吗?

    我正在浏览我们的代码库并看到很多这样的测试 declare row id int declare row attribute string select row attribute ROW ATTRIBUTE from SOME TABLE
  • isset() 和empty() - 使用什么

    你能帮助我改进我的编码风格吗 在某些任务中我需要检查 变量是否为空或包含某些内容 为了解决这个任务 我通常会执行以下操作 检查 该变量是否已设置 如果它已设置 我检查 它是否为空 我有一个问题 我应该在empty 之前使用isset 有必要
  • 错误:org.apache.hadoop.hbase.MasterNotRunningException:null+hbase+hadoop

    我最近用两台机器 在ubuntu上 配置了hadoop集群 到目前为止效果很好 但是当我尝试在上面的 hadoop 集群上配置 hbase 时 它 显示错误 这就是我所做的 我有两台机器 192 168 1 110 Hadoop主站 192
  • 无法翻译 LINQ 表达式

    我有一张桌子叫Orders和一个名为Customers Orders有财产CustomerId 现在我想获取我的客户的所有订单Customers list 这是我尝试过的 IEnumerable
  • 如何右对齐 JLabel 中的图标?

    对于带有图标的 JLabel 如果您setHorizontalTextPosition SwingConstants LEADING 无论标签有多宽 图标都会绘制在文本之后 这对于列表来说尤其糟糕 因为图标会到处都是 具体取决于每个项目的文
  • FireMonkey TListview 搜索重新加载问题

    当您进行搜索时 TListview 无法正确重新加载 请清除搜索 然后重新加载列表视图 使用XE5 步骤是 项目运行后 在搜索中输入文本 单击 清除 按钮或删除搜索文本或单击搜索 X 按钮清除搜索 按 重新加载 按钮 什么也没有出现 您可以
  • Webview 不加载 URL,但浏览器会加载

    因此 从我的第一个屏幕开始 我将 URL 传递给要在 Web 视图中启动的活动 但是当 webview 启动时 它显示 web page not available The web page at URL might be temporar
  • 需要 Microsoft Visual C++ 14.0,在 Windows Docker 上安装 pip 包

    我希望能够安装 C 编译器 因为某些软件包没有我需要的轮子 Windows 上大量的 Visual Studio 构建工具中所需的确切工具需要大量挖掘 并且安装需要很长时间 我见过一些导致此问题的错误 请随意将其他错误添加到此列表中 库 m
  • 嵌套形式和一对一关系

    我的用户和目标之间存在一对一的关系 我想构建一个显示用户目标的表单 问题是我的代码仅在用户已经定义了目标时才有效 当不存在目标时 不会呈现文本字段 Rails 是否提供了一种简单的方法来做到这一点 我就是这样做的 class User lt
  • 在 beforeAction 中渲染视图时,在 Yii 中出现“标题已发送”错误

    我读过 Yii2 的处理程序 但我不知道如何在这种情况下正确使用它们 基本上在我的SiteController 我有 class SiteController extends app components Controller public