如何将当前用户ID传递给CakePHP模型的buildRules方法?

问题描述 投票:0回答:1

我在CakePHP 3.8中使用了AuthComponent,现在我需要在Model buildRules方法中做一些逻辑,但为此我需要获得当前的用户ID.有什么方法可以在不使用黑客的情况下传递retrieve它,比如直接从会话中访问。https:/book.cakephp.org3encore-librariesvalidation.html#using-custom-validation-rules。

而且它对验证有效,但是,我无法从构建规则的内部访问验证器。

当我按照这里的描述做时,我得到一个空对象。https:/book.cakephp.org3enormvalidation.html#using-validation-as-application-rules。

我似乎可以附加新的验证规则,但无法检索 "通过 "提供者以获得用户ID。

这似乎是一件微不足道的事情,但我花了相当多的时间试图以一种适当的方式获得ID。

php cakephp model userid build-rules
1个回答
0
投票

好了,经过努力,我发现如何在构建规则中检索user_id。可能对某人有帮助。

在控制器中这样做

         $this->ExampleModel->validator('default')->provider('passed', [
            'current_user' => $this->Auth->user('id')
         ]);

然后把这个放在你的buildRules方法中。

public function buildRules(RulesChecker $rules)
{
    $user_id = $this->validator('default')->provider('passed')['current_user'];
    $rules->add(
       function ($entity, $options) use($user_id) {

         //return boolean for pass or fail
        },
        'ruleName',
        [
          'errorField' => 'some_id',
          'message' => 'Some ID field is inconsistent with App logic.'
        ]
    );

    return $rules;
}

0
投票

正确的处理方式通常是使用以下两种方式 活动,或保存选项。

例如,要使ID对所有表的应用规则都可用,你可以这样做。

$this->getEventManager()->on('Model.beforeRules', function (
    \Cake\Event\Event $event,
    \Cake\Datasource\EntityInterface $entity,
    \ArrayObject $options
) {
    $options['current_user'] = $this->Auth->user('id');
});

它将在 $options 规则的参数,即如 $options['current_user'].

对于特定的保存操作,您可以将其传递到选项的 save() 的调用。

$this->ExampleModel->save($entity, [
    'current_user' => $this->Auth->user('id')
]);

还有一些插件可以帮你解决这个问题,例如: muffin/footprint.

© www.soinside.com 2019 - 2024. All rights reserved.