【问题标题】:Kohana 3.2 - ORM Update field which have been modifed by adminKohana 3.2 - 管理员已修改的 ORM 更新字段
【发布时间】:2012-12-17 05:33:35
【问题描述】:

我迟到 5 年后回到专业编程领域,所以我从头开始学习 ;) 所以我选择了 Kohana 框架作为我的第一个框架,我现在尝试构建第一个应用程序,但我遇到了一个小问题,让我们开始吧。

我使用 Kohana ORM 和 Auth 模块,你知道默认 Auth 模块用户表有默认字段(用户名、密码、lastlogin)我尝试通过以下方式扩展用户:

  • 创建新表 (user_additionals)
  • 创建新模型(User_Additional)

模型如下所示:http://pastie.org/private/412jflfoifyqs46uaxmga - 没什么特别的。一切都会好起来的,我喜欢这样的简单参考:$user->additional->firstname etc.

目前我有 bulid 管理面板(管理员可以编辑每个用户)和...每个字段。我有 10 个字段,例如名字、姓氏、出生日期,以表格形式呈现(填充表格 - 由模板分配加载的占位符),这是我的小问题: 如果管理员需要编辑用户签名或其他内容,我想让管理员可以从多个字段中编辑一个字段 - 他从很多可用字段中编辑一个字段,然后单击“提交”,这很容易 - 一个表单已更新。

但是,如果我尝试使用这样的东西: $edit = ORM::Factory('User_Additional')->values($_POST);我得到验证异常(被捕获,但这里是验证错误 - 模型要求所有字段为 !empty...(通过验证规则)

我使用临时解决方案,但我是一个完美主义者,我想从一开始就创建好的代码,所以在这里你可以找到我的代码:http://pastie.org/private/axtwxbt66gtvcwiv97hvlq 我的解决方案从第 29 行开始(上面的链接)。

所以我的问题是: *在这种情况下如何使验证例外? * *如何使验证例外,例如操作 /admin/edituser/ 是否可能? * *如何更好地编写模型代码?感谢任何可以帮助我的建议*

谢谢!

【问题讨论】:

    标签: php orm kohana


    【解决方案1】:

    验证只会在“非空”字段上运行,除非您指定“not_empty”规则。 所以基本上,您可以执行以下操作:(当您需要强制字段的“非空”时)

    class Model_User_Additional extends ORM
    {
      protected $foreign_key_suffix = 'user_id';
      protected $_primary_key = 'user_id';
    
      public function enforce_rules(array $fields)
      {
        $validation = Validation::factory($this->_object);
        foreach ($fields as $field)
        {
          $validation->rule($field, 'not_empty');
        }
        return $validation;
      }
    
      public function rules()
      {
        /* Removed all not_empty */
        return array(
          /*  'user_id' => array(
                array('not_empty'),
            ), */
            'firstname' => array(
                array('text'),
            ),
            'lastname' => array(
                array('text'),
            ),
            'birthdate' => array(
                array('date'),
            ),
            'postprice' => array(
                array('decimal'),
            ),
            'articleprice' => array(
                array('decimal'),
            ),
            'phonenumber' => array(
                array('phone'),
            ),
      /*      'active' => array(
                array('not_empty'),
            ), */
      /*      'lastupdate' => array(
                array('not_empty'),
            ), */
            'info' => array(
                array('text'),
            ),
    
        );
      }
    
      public function edit_user($values, $expected, $extra_validation = NULL)
      {
        return $this->values($values, $expected)->update($extra_validation);
      }
    }
    

    用法是:

    $user = ORM::factory('User_Additional');
    $user->values(array('field' => 'value'))->create($user->enforce_rules(array('user_id')));
    /* and the same for updating */
    $user->set('info', $_POST['info'])->update($user->enforce_rules(array('info')));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多