Торт Php - Как получить доступ к идентификатору записи в процессе проверки? - PullRequest
0 голосов
/ 01 апреля 2020

Чтобы проверить слизняк, мне нужно знать значение $entity->id. Однако он доступен только в том случае, если мы напрямую передадим его в $data: $this->Accounts->patchEntity($entity, $data);.

public function validationDefault(Validator $validator) {
  $validator
    ->add('slug', [
      'isUnique' => [
        'rule' => function ($value, $context) {
          debug($this);
          debug($value);
          debug($context);
        }
      ]
    ]
}

Я не могу гарантировать, что я всегда буду передавать id во всех моих контроллерах. Есть ли какой-нибудь способ доступа к $entity в моих правилах проверки?

1 Ответ

1 голос
/ 01 апреля 2020

Нет доступа к $entity в вашей проверке.

Однако Cake Php имеет специальные API для этих проверок - RulesChecker . Он должен использоваться для обеспечения уникальности электронной почты, например. В методе buildRules() вы можете получить доступ к $entity.

. В то время как базовая c проверка данных выполняется, когда данные запроса преобразуются в сущности, многие приложения также имеют более сложную проверку, которая должна быть только применяется после завершения проверки basi c. Эти типы правил часто называют «правилами домена» или «правилами приложения». Cake PHP раскрывает эту концепцию через «RulesCheckers», которые применяются до сохранения сущностей.

Вам следует добавить метод buildRules() в класс таблицы:

// Don't forget the import!
use Cake\ORM\RulesChecker;

public function buildRules(RulesChecker $rules){
    // Add a rule that is applied for create and update operations
    $rules->add(function ($entity, $options) {
        // Return a boolean to indicate pass/failure
    }, 'ruleName');

    // Add a rule for create.
    $rules->addCreate(function ($entity, $options) {
        // Return a boolean to indicate pass/failure
    }, 'ruleName');

    // Add a rule for update
    $rules->addUpdate(function ($entity, $options) {
        // Return a boolean to indicate pass/failure
    }, 'ruleName');

    // Add a rule for the deleting.
    $rules->addDelete(function ($entity, $options) {
        // Return a boolean to indicate pass/failure
    }, 'ruleName');

    return $rules;
}
...