0

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

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

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

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

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

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

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

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

谢谢!

4

1 回答 1

0

验证只会在“非空”字段上运行,除非您指定“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')));
于 2013-01-06T07:15:01.720 回答