当我使用另一个控制器渲染页面时,表单验证停止工作

2023-12-01

我编写了一个快速 CI 库类来渲染我的页面,这样我就不必一直输入“$this->load->view”并且保持 DRY。现在,当我在传递无效数据后重新呈现联系表单时,错误消息不会显示。

图书馆类:

class Page extends CI_Controller {

    public function render($page, $data) { // $page should be path to page view

        $this->load->view('fragments/header', $data);
        $this->load->view('fragments/navigation');
        $this->load->view($page);
        $this->load->view('fragments/navigation');
        $this->load->view('fragments/footer');

    }  

}

和控制器:

class Contact extends CI_Controller {

    public function __construct() {
        parent::__construct();

        $this->load->helper('form');
        $this->load->library(array('form_validation', 'email', 'page'));
    }

    public function index() {

        $this->form_validation->set_rules('sender_name', 'From', 'required');
        $this->form_validation->set_rules('sender_email', 'Email', 'required|valid_email');
        $this->form_validation->set_rules('subject', 'Subject', 'required');
        $this->form_validation->set_rules('message', 'Message', 'required');

        if ($this->form_validation->run() === FALSE) {

            $this->load->library('page');
            $this->page->render('contact/contact', array('title' => 'Contact Me')); // pass in page title

            /* IT WORKED THIS WAY
            $this->load->view('fragments/header', array('title' => 'Contact Me')); // pass in page title
            $this->load->view('fragments/navigation');
            $this->load->view('contact/contact'); // TODO maintain form state
            $this->load->view('fragments/navigation');
            $this->load->view('fragments/footer');
             * 
             */
        }

//SNIP

联系表格视图:

<h1>Contact Me</h1>
<?php echo form_open('contact', 'id="contact_form"'); ?>

<label for="sender_name">Name:</label>
<?php echo form_input('sender_name'); ?>
<span class="error"><?php echo form_error('sender_name'); ?></span>

<label for="sender_email">Email:</label>
<?php echo form_input('sender_email'); ?>
<span class="error"><?php echo form_error('sender_email'); ?></span>

<label for="subject">Subject:</label>
<?php echo form_input('subject'); ?>
<span class="error"><?php echo form_error('subject'); ?></span>

<label for="message">Message:</label>
<?php echo form_textarea('message'); ?>
<span class="error"><?php echo form_error('message'); ?></span>

<?php echo form_submit('submit', 'Send'); ?>  

如何使用此帮助程序渲染页面并仍然从 form_validation 库检索错误消息?


创建一个名为template.php在您的视图文件夹中,其中包含以下代码:

<?php

$this->load->view('fragments/header', $this->_ci_cached_vars); // pass $data vars
$this->load->view('fragments/navigation');
$this->load->view($view);
$this->load->view('fragments/navigation');
$this->load->view('fragments/footer');

然后使用以下控制器代码:

public function index() {

    $this->form_validation->set_rules('sender_name', 'From', 'required');
    $this->form_validation->set_rules('sender_email', 'Email', 'required|valid_email');
    $this->form_validation->set_rules('subject', 'Subject', 'required');
    $this->form_validation->set_rules('message', 'Message', 'required');

    if ($this->form_validation->run() === FALSE) {

        $data = array(
            'view' => 'contact/contact', 
            'title' => 'Contact Me');
        $this->load->view('template', $data);
    }

您不需要创建库来执行此操作,因为您只需创建一个模板视图即可加载适当的视图和指定的视图并将数据传递给它们。

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

当我使用另一个控制器渲染页面时,表单验证停止工作 的相关文章

  • Zend Framework 生成唯一的字符串

    我想生成一个唯一的 4 6 个字符长的字母数字字符串 以便与每个记录 用户 一起保存在数据库中 db 字段具有唯一索引 因此尝试保存预先存在的字符串会生成错误 现在我正在生成一个随机字符串并使用 try catch 因此在添加新记录时如果抛
  • 如何解压 PHP/Lumen/Laravel 的 gzip 请求?

    我收到来自第三方的 gzip 编码文本请求 1mb 所以这是有道理的 我的测试路线 router gt post testgzip function Illuminate Http Request request decompressed
  • 在 php 中为类自动生成 getter 和 setter 的最佳方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我经常创建一个包含一些私有变量的类 当设置此类的实例时 应该可以使用 getter 和 setter 填充该类的所有变量 有没有一种简单的方法可
  •  
    标记内删除

    我制作了简单的 BBCode 脚本 一切正常 但后来我使用了一个 javascript 库来美化我的代码 pre pre 现在我面临的唯一问题是 br 每行代码后面的标签 pre pre tags 所以问题是我怎样才能删除 br 标记哪些在
  • PHP 会话不适用于游戏

    我正在尝试模仿一款名为 SKUNK 用骰子玩 的游戏来完成一项作业 我无法让会话正常工作 这是我第一次使用 PHP 我还被告知无需会议即可完成 这是我的代码
  • PHP MySQL 使用选项/选择 HTML 表单标签进行多重搜索查询

    我正在尝试使用两个搜索字段设置基本的 MySQL LIKE 搜索 我不想拥有它 所以它有多个可选搜索字段 例如if isset POST city isset POST name 我不知道如何用 HTML 来做到这一点
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • 扩展蓝图类?

    我想覆盖timestamps 函数中发现Blueprint班级 我怎样才能做到这一点 e g public function up Schema create users function Blueprint table table gt
  • 如何在原则 2 迁移中删除外键

    我想在原则 2 迁移中删除外键 但没有 dropForeignKeyConstraint 有谁知道怎么丢掉吗 public function down Schema schema table schema gt getTable table
  • 使用 SSL 证书验证 Web 浏览器

    是否可以使用 ssl 证书对 Web 浏览器进行身份验证 假设我在应用程序中存储私钥 有什么方法可以从浏览器读取密钥并尝试基于该私钥进行身份验证 您可以使用 SSL TLS 客户端证书身份验证来对浏览器 用户进行身份验证 服务器必须请求客户
  • PHP 脚本可以在终端中运行,但不能在浏览器中运行

    我正在尝试执行exec命令 但我遇到了问题 当我运行以下代码时 当我通过浏览器运行它时它不起作用 但如果我把输出 str将其复制并粘贴到终端中 它工作得很好 造成这种情况的原因是什么 我该如何解决 目前我正在运行localhost php
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • Woocommerce 结账自定义选择字段

    我有以下功能 将选择列表添加到 woo commerce 结账表单中 woocommerce form field airport pickup array type gt select class gt array airport pic
  • SQL 最近日期

    我需要在 php 中获取诸如 2010 04 27 之类的日期作为字符串 并在表中找到最近的 5 个日期 表中的日期保存为日期类型 您可以使用DATEDIFF http dev mysql com doc refman 5 1 en dat
  • 调用未定义的函数 CodeIgniter\locale_set_default() - Xampp

    我正在尝试使用 Xampp 设置 Codeigniter4 但是在调用公共地址时http localhost projectfolder public index php如中所述README mdCodeIgniter4框架的文件中 出现下
  • php,统计字符并删除超过140个字符的内容

    我需要一个 PHP 函数来计算短语的字符数 如果短语长度超过 140 个字符 则此函数应删除所有其他字符并在短语末尾添加三个点 例如我们有 message I am what I am and you are what you are et
  • 为什么 Composer 降级了我的包?

    php composer phar update这样做了 删除了 2 3 0 软件包并安装了整个 2 2 5 Zend Framework php composer phar update Loading composer reposito
  • 如何使用 PHPExcel 库从 Excel 获取日期

    我正在尝试使用 PHPExcel 从 Excel 获取日期 但我没有得到日期 我得到的字符串值不是 1970 以来的秒数 我尝试过的代码是 InvDate trim excel gt getActiveSheet gt getCell B
  • post php mysql 的拆分关键字

    我有一个表存储帖子 ID 它的标签如下 Post id Tags 1 keyword1 keyword2 keyword3 我想循环遍历该表中的每一行并执行以下操作 将关键字1 关键字2 关键字3放入新表中 word id word val
  • 对具有混合类型值的数组进行数字排序

    我有一个像这样的混合数组 fruits array lemon Lemon 20 banana apple 121 40 50 然后申请sort 其功能如下 sort fruits SORT NUMERIC foreach fruits a

随机推荐

  • 从 .pst 文件中提取所有 .msg 文件

    注意 我被要求创建一个应用程序 最好在 MFC 中从 pst 文件中提取 msg 文件 我被告知他们尝试使用其他第 3 方应用程序 但都失败了 不要问我怎么做 所以这就是为什么他们要求我创建一个应用程序来执行此操作 第一个问题 我被告知MF
  • 无法导入包:InputHookManager 的问题

    我现在花了大约一个小时尝试解决这个问题 但失败了 我读过几个相关问题 例如this GitHub 问题如this但无法找到如何最好地解决这个问题 导致错误的步骤 import matplotlib pyplot as plt 错误信息 At
  • 批处理脚本 - 计算文件中字符的实例数

    在 Windows XP 中使用批处理脚本 bat 文件 我将如何读取文本文件并查找存在多少个字符实例 例如 我有一个包含以下内容的字符串 OIJEFJ JOIEJKAJF LKAJFKLJEIJ JKLFJALKJF LKJLKFA LK
  • 正确使用 Kivy 的 .kv 文件并将它们导入到您的 Python 脚本中

    我正在关注Kivy 教程我无法从 kv 文件正确加载属性 由于某种原因 我有时可以通过for kv in listdir kv path Builder load file kv path kv 但我不能通过简单地将 kv 文件放在同一个根
  • AndroidTestCompile 导入中无法识别依赖项

    实际上 我的项目有单元测试 所有这些都配置在 src test java 最近我需要添加仪器测试 src androidTest java 为此 我在中添加了 espresso 依赖项build gradle dependencies co
  • 扩展-THREE.MeshBasicMaterial

    我希望制作 THREE MeshBasicMaterial 的副本 并基于它创建我自己的修改材质 我需要稍微编辑一下着色器 并添加一些制服 但我可以处理这个 首先 我想让材质像 MeshBasicMaterial 一样工作 并从那里获取东西
  • 如何编写客户端-服务器视频流

    我正在开发一个实时工作的项目 我必须编写一个视频流客户端服务器应用程序 该服务器会将 AVI MPEG 等发送到 Web 应用程序 我有一些疑问 建议使用什么协议来执行此操作 http rtp 或其他 在网络应用程序中 如何向用户显示它 使
  • 实体框架 6:审核/跟踪变更

    我的核心项目是用 C 编写的 我在一个数据库上工作 其中一些表具有 user mod 和 date mod 列 用于标记谁以及何时制作了一些mod 并且与 data new 和 user new 相同 我的问题 有没有办法集中它并自动插入这
  • jquery ajax调用不是异步的

    我对 jQuery 的 AJAX 方法的实现很陌生 我有一个简单的设置 可以访问两个不同的页面 一个需要 10 秒才能完成 我在上面设置了一个计时器 另一个检查第一页的状态 这两个函数是progressCheck 它每秒请求其页面的最新状态
  • 使用邻接列表与邻接矩阵的图的大小?

    Suppose there are 236 web pages and on average each web page has 24 hyperlinks Consider the directed graph with one vert
  • 在 Python 中通过 Selenium 导航到新页面

    如何在 python 中使用与 Selenium 相同的驱动程序导航到另一个网页 我不想打开新页面 我想继续使用同一个驱动程序 我认为以下方法会起作用 driver navigate to https support tomtom com
  • 如何在 PHP 中构建跨数据库查询?

    在我们的最后一集中 我如何在 MySQL 中构建跨数据库查询 我学会了如何在MySQL中构建跨数据库查询 这很有效 但是当我们的英雄尝试在 PHP 中使用这些新知识时 他发现他最好的朋友失败了 我看了一下mysql select db对于
  • 如何在应用程序中的每个 MessageBox 处放置断点?

    如何在应用程序中的每个 MessageBox 处放置断点 在 Visual Studio IDE 中选择菜单Debug gt New breakpoint gt Breakpoint at Function 用文本 MessageBox 填
  • Retrofit 收到 400 错误请求,但与邮递员一起使用

    我的 api 基本网址是 https locodealapi herokuapp com api deals 在邮递员中 在标题中传递以下内容 效果很好 x access token eyJhbGciOiJIUzI1NiIsInR5cCI6
  • VBA - 如果 A 列中的单元格不为空,则 B 列等于

    我正在寻找一些代码来查看 A 列 只要 A 列中的单元格不为空 那么 B 列中的相应单元格将等于特定值 因此 如果 Cell A1 则 Cell B1 Value MyText 重复此操作 直到 A 列中的单元格为空白或为空 为了添加更多说
  • Mercurial - 添加不在存储库文件夹内的项目

    我是一个没有经验的 Mercurial 用户 我正在使用 VS2010 和 Mercurial 我让一切都在一个存储库上运行良好 该存储库包含一个解决方案文件和嵌套在 父 文件夹中的两个项目 每当我更改文件时 提交过程都会检测到更改等 然后
  • 如何为 Swing 中的 JTable 提供分页支持?

    我在 Swing Java 中创建了一个 GUI 其中使用了 JTable 现在我想通过使用分页在其中显示下一页信息 我该怎么做呢 实现此目的的另一个选项是使用无滚动条的滚动窗格和几个导航按钮来实现控制 已经添加的按钮都是正常的JButto
  • 如何从 Analytics Application Insights 获取 Qna Maker“Q”?

    我已经使用 Qna Maker 创建了聊天机器人的知识库 并尝试使用 Analytics Application Insights 可视化一些统计数据 我想做的事 我想创建一个图表 其中包含最常见的 Qna Maker 问题 我的问题 我在
  • 读取 React 应用程序 src 文件夹中的 excel

    我使用创建了一个反应应用程序react CLI 我现在创建了一个名为的文件夹data现在我想使用读取该数据xlsxnpm 包 但是 它不起作用 我认为这可能与我引用 Excel 文件的方式有关 因为我收到警告 字符串 类型上不存在属性 工作
  • 当我使用另一个控制器渲染页面时,表单验证停止工作

    我编写了一个快速 CI 库类来渲染我的页面 这样我就不必一直输入 this gt load gt view 并且保持 DRY 现在 当我在传递无效数据后重新呈现联系表单时 错误消息不会显示 图书馆类 class Page extends C