Kohana ORM 和验证,有问题

2023-12-07

尝试使用适用于 Kohana 3.2 的 ORM 进行验证。

目前我有我的模型:

<?php defined('SYSPATH') or die('No direct access allowed.');

class Model_Brand extends ORM {

    protected $_has_many = array('models' => array());

    protected $_rules = array(
        'name' => array(
            'not_empty' => NULL,
            'min_length' => array(3),
            'max_length' => array(20),
        ),
        'sku' => array(
            'not_empty' => NULL,
            'min_length' => array(3),
            'max_length' => array(6),
        ),

    );

}

这是我的控制器:

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Brand extends Controller_Layout {

    public function action_view()
    {
        $brands = ORM::factory('brand')->find_all();
        $this->template->title = __('Brands');
        $this->template->content = View::factory('brands/view' );
        $this->template->content->set('brands', $brands);
    }

    public function action_edit()
    {
        if($_POST)
        {
            try
            {
                $brand = ORM::factory('brand', $this->request->param('id'));
                $brand->values($_POST);

                if($brand->check())
                {
                    $brand->update();
                    $brand->save();

                    //go to brand/views
                }

            }
            catch (ORM_Validation_Exception $e)
            {
                //pass errors to brand/edit
            }
        }
        else
        {
            $brand = ORM::factory('brand', $this->request->param('id'));

            $this->template->title = __('Edit Brand');
            $this->template->content = View::factory('brands/edit' );
            $this->template->content->set('brand', $brand);
        }
    }
}

我什至还没有到达错误部分。我遇到的问题是它对任何输入进行验证,而不是使用模型中的规则。另外,如果有人可以告诉我如何设计这样的更新操作,将会有很大的帮助。谢谢。


这就是我进行模型验证的方式,我觉得这是最直接、最优雅的。

首先,我在 Rules() 方法中设置规则:

<?php defined('SYSPATH') or die('No direct access allowed.');

class Model_Brand extends ORM {

    public function rules()
    {
        return array(
            'name' => array(
                array('not_empty'),
                array('min_length', array(':value', 3)),
                array('max_length', array(':value', 20)),
            )
            'sku' => array(
                array('not_empty'),
                array('min_length', array(':value', 3)),
                array('max_length', array(':value', 6)),
            )
        );
    );
}

这就是我管理编辑操作的方式:

public function action_edit()
{
    $brand = ORM::factory('brand', $this->request->param('id'));

    if (!$brand->loaded())
    {
        throw new Kohana_Exception('Brand not found.');
    }

    $this->template->title = __('Edit Brand');
    $this->template->content = View::factory('brands/edit')
        ->set('brand', $brand)
        ->bind('errors', $errors);

    if ($this->request->method() === Request::POST)
    {
        try
        {
            $brand->values($this->request->post());
            $brand->save();

            // Success! You probably want to set a session message here.

            $this->request->redirect($this->request->uri());
        }
        catch(ORM_Validation_Exception $e)
        {
            // Fail!

            $errors = $e->errors('brand');
        }
    }
}

在我看来:

<?php if ($errors) {?>
    <!-- display errors here -->
<?php } ?>

<?php echo Form::open()?>
    <fieldset>

        <div class="field">
            <?php echo 
                Form::label('name', __('Name')),
                Form::input('name',  $brand->name)
            ?>
        </div>

        <?php echo Form::submit('save', 'Save')); ?>
    </fieldset>
<?php echo Form::close()?>

正如您在视图中看到的,我没有进行任何条件检查来查看表单字段中显示的内容,因为它是由模型中的数据管理的,而模型由控制器管理。

希望这对您有所帮助,如果您需要进一步说明,请询问。

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

Kohana ORM 和验证,有问题 的相关文章

  • 如何解压 PHP/Lumen/Laravel 的 gzip 请求?

    我收到来自第三方的 gzip 编码文本请求 1mb 所以这是有道理的 我的测试路线 router gt post testgzip function Illuminate Http Request request decompressed
  • 如何检查PHP变量是否包含非数字?

    我只是想知道检查 PHP 变量中是否有非数字的方法以及它是否也检测字符之间的空格 需要确保我的表单字段中没有添加任何奇怪的内容 提前致谢 如果您的意思是您只想要一个包含数字的值 那么您可以使用ctype digit http php net
  • MySQL/PDO::quote() 尽管使用 PDO::PARAM_INT 参数,但仍在整数周围加上引号

    无论我传递给什么值 数据类型对 它都会出现 pdo gt quote value type 它总是将其引用为字符串 echo pdo gt quote foo PDO PARAM STR foo as expected echo pdo g
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • jquery验证-等待远程检查完成

    当我打电话时 form valid 我连接了远程验证检查 一切正常 但是如果所有其他字段都有效 则表单会通过验证 因为远程检查没有 足够快 返回响应 有没有办法强制 jquery 验证等待任何远程检查完成或挂钩远程检查调用的完成事件 我目前
  • posts_search 中的自定义查询

    如何使用此查询作为我的自定义搜索查询 add filter posts search my search is perfect 20 2 function my search is perfect search wp query sWord
  • 如何使用 php 下载/打印页面的特定部分

    我有一个 HTML 页面如下 Lorem Ipsum is simply dummy text of the printing and typesetting industry Lorem Ipsum has been the indust
  • Symfony2 Assetic 和 Less Sourcemaps

    我不确定如何破解 assetic less 过滤器以输出源映射文件 我这里指的是LessFilterhttps github com kriswallsmith assetic blob master src Assetic Filter
  • 使用 preg_replace 仅替换第一个匹配项

    我有一个结构类似于以下的字符串 aba aaa cba sbd dga gad aaa cbz 该字符串每次都可能有点不同 因为它来自外部源 我只想替换第一次出现的 aaa 但其他人则不然 是否可以 可选的第四个参数预替换 http php
  • 如何在原则 2 迁移中删除外键

    我想在原则 2 迁移中删除外键 但没有 dropForeignKeyConstraint 有谁知道怎么丢掉吗 public function down Schema schema table schema gt getTable table
  • 学说迁移后备

    我们正在使用原则迁移 当迁移包含多个操作并且其中一个操作失败时 通常会出现问题 例如 如果迁移添加了 5 个外键 其中第 5 个失败 而字段长度不同 则修复字段错误并重新生成迁移不会not修复整个问题 而现在出现一个与 4 个密钥已存在有关
  • 使用 SSL 证书验证 Web 浏览器

    是否可以使用 ssl 证书对 Web 浏览器进行身份验证 假设我在应用程序中存储私钥 有什么方法可以从浏览器读取密钥并尝试基于该私钥进行身份验证 您可以使用 SSL TLS 客户端证书身份验证来对浏览器 用户进行身份验证 服务器必须请求客户
  • PHP 与 MySQL 查询性能( if 、 函数 )

    我只看到这个artice http www onextrapixel com 2010 06 23 mysql has functions part 5 php vs mysql performance 我需要知道在这种情况下什么是最好的表
  • 在 apache docker 容器中运行虚拟主机

    我在同一个 apache 容器中有两个 php 应用程序 我试图在端口上运行其中一个应用程序 因为它需要通过根域而不是子文件夹进行访问 我想在端口 8060 上运行应用程序 我尝试使用 apache 虚拟主机执行此操作 但它不会加载页面 h
  • PHP 中只保留数组的前 N ​​个元素? [复制]

    这个问题在这里已经有答案了 有没有办法只保留数组的前 N 个 例如 10 个 元素 我知道有array pop 但是有没有更好 更优雅的方法呢 您可以使用array slice http php net array slice or arr
  • Mac 应用程序商店 - 尝试让加密发挥作用。 。 。我缺少什么?

    我正在尝试使用 Alan Quartermain 的解决方案 如该问题所链接 Mac App Store 收据验证码 https stackoverflow com questions 4261348 mac app store recei
  • php 错误 fopen(): 文件名不能为空

    发送带有附件代码的电子邮件工作正常 最近我们已将文件传输到另一个托管服务器 idk 发生了什么 它显示以下错误 警告 fopen 第 106 行 home hugerecruitmetnt public html validatecva p
  • CURL 中的 data-urlencode 是什么意思?

    我搜索了很多个小时试图弄清楚 php curl 中的 data urlencode 是什么 我尝试过这个 但我认为这是不对的 xmlpost object1 file https www lob com goblue pdf 在文档中是 d
  • post php mysql 的拆分关键字

    我有一个表存储帖子 ID 它的标签如下 Post id Tags 1 keyword1 keyword2 keyword3 我想循环遍历该表中的每一行并执行以下操作 将关键字1 关键字2 关键字3放入新表中 word id word val
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • 将 Flask 请求注入另一个 Flask 应用程序

    有没有办法将 Flask 请求对象注入到不同的 Flask 应用程序中 这就是我想做的 app flask Flask name app route foo
  • Mysql + 大表 = 慢查询?

    我在 Mysql 上的大表上遇到一些性能问题 该表有 3800 万行 大小为 3GB 我想通过测试 2 列来选择 我尝试了很多索引 每列一个索引 两列一个索引 但查询仍然很慢 如下所示 超过 4 秒才能获取 1644 行 SELECT tw
  • 将 Java 类的消息记录回空手道报告

    我们有一个场景 我们必须发布 json 请求 然后验证 UI 中的一些操作 因此 我们有一个空手道功能文件 它会满足请求 然后我们从功能文件中调用一个 java 类 java 类将运行我们的 Selenium Webdriver 测试 在
  • 基于API密钥监控API网关API

    如何监控我的 Amazon API Gateway API API 密钥 目前它显示所有 API 密钥的数据 但我想显示特定 API 密钥的 API 调用 5xx 错误 4xx 错误等 如果您正在考虑监控 APIX Api Key标题级别
  • Firefox 锁定 place.sqlite

    平台 Firefox 3 6 13 Python 2 7 stackless 和 Windows 7 尚未在 Ubuntu 上测试 我会 我尝试使用 apsw 库 conn apsw Connection dir profile place
  • 从不扩展 Application 的类的 Main 方法启动 JavaFX

    我在从未扩展的类的 Main 方法启动 JavaFX 应用程序时遇到问题javafx application Application 在我的应用程序中有MainApp java哪个应该启动重写的方法start in the MainUICo
  • JSON 列表(不是对象)到 Bash 数组?

    我有一个 JSON 列表 包含项目列表的键值对的值 john boris joe frank 我如何将其转换为 bash 数组 以便我可以迭代它们 简单案例 无换行字符串 简单的方法是使用jq将列表转换为每项一行 并将其读入脚本中 json
  • 将数据导出到谷歌表格

    这更多的是关于性能 这是场景 此应用程序用于控制组织中的电脑库存 因此该应用程序有一个由 32 个字段和 1 个关系组成的模型 该模型已保存 2650 条记录 我还有一个将所有记录导出到谷歌表格的过程 尽管它工作得很好 但从我的角度来看 导
  • 在两个上下文之间共享纹理/图像而不需要上下文共享的最佳方法是什么?

    我想要做的是从一个上下文中获取渲染结果 并在另一个不与前一个上下文共享的上下文中进行进一步的渲染 我能想到的唯一方法是使用像 API 这样的 glReadPixels 将渲染结果从 GPU 内存复制到系统内存 并在另一个上下文中使用复制的数
  • php date() 比服务器时间提前一小时(夏令时问题)

    我正在尝试排查并解决这个问题 我正在使用的服务器 Linux 上的 php 5 2 9 具有正确的本地时间 America Buenos Aires user server home site public html date Mon No
  • 合并sqlite

    最近在读sqlite3的源码 在合并版本中 只有四个文件 上官方网站 他们说 合并也使其运行得更快 当我们使用合并来编译 SQLite 而不是单独的源文件时 我们测量到性能提高了 5 到 10 我不明白他们是如何做到的以及为什么 有人有什么
  • NetUIHWND 和 DirectUIHWND [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 使用Spy 工具 似乎某些微软应用程序使用网络UIHWND and 直接UIHWND窗口类 例如 Word 2010 的功能区似乎是 NetUIHW
  • ActiveAdmin:编辑模型实例时下拉菜单太大

    我有两个模型 UserDevice and UserInfo如下 在 schema rb 中 create table user devices force cascade do t t integer user info id t str
  • 在 Neo4j 中将实体与适当的关系相关联?

    我尝试使用 Neo4j 对项目 员工和项目角色之间的关系进行建模 每个项目都有一个称为 项目经理 的角色和一个称为 总监 的角色 我试图在数据模型中实现的是能够说 对于项目 A 主管是员工 X 就我的目的而言 重要的是 项目 员工 和 角色
  • AT&T 汇编语言中的“.=”是什么意思?

    我正在尝试编写一个启动程序 内容如下 text balabala globl start start balabala start 510 byte 0x55 0xaa 顺便说一句 我也无法理解 byte 0x55 0xaa 是什么意思 它
  • 给定一组 n 个整数,返回总和为 0 的 k 个元素的所有子集

    给定一组未排序的n整数 返回总和为 0 的所有大小为 k 的子集 即每个集合有 k 个唯一元素 所以我给了面试官以下解决方案 我研究过极客观点 没有使用额外的空间 一切都就地完成 等等 但是当然成本是 O n k 的高时间复杂度 其中k t
  • django-autocomplete-light 错误 = 'list' 对象没有属性 'queryset'

    我是 django 的新手 我需要你的帮助 在设置我的测试之后 我已经尝试了很多天来理解 django autocomplete light http 192 168 0 108 8000 country autocomplete 工作 数
  • 将列变量字符串从“1”更改为“01”

    我在数据框中有一列是字符类型 变量是 1 01 2 01 3 03 4 04 等的混合 我如何选择所有没有前导 0 和格式的内容 以便它们都是 01 02 03 04 等 我们需要首先将其转换为numeric并使用sprintf df1 c
  • 使用 NetworkX 测量图之间的相似性

    I have 两张图A and B 它们可能是同构的 完全不同的 或者有一些相似之处 很少有节点是相同的 或者很少有节点共享相同的边 我想看看 检查这些图表有多么不同 相似 networkx is isomorphic 是一种方法 然而 这
  • Kohana ORM 和验证,有问题

    尝试使用适用于 Kohana 3 2 的 ORM 进行验证 目前我有我的模型