Cake php 3.x Table Beforefind, невозможно остановить событие - PullRequest
0 голосов
/ 18 февраля 2020

Согласно документации на веб-сайте Cake PHP: (https://book.cakephp.org/3/en/orm/table-objects.html#beforefind) остановка события или предоставление возвращаемого значения должны остановить операцию поиска.

Я использую следующий код в Beforefind:

$event->stopPropagation();
return false;

Но это, похоже, не имеет никакого эффекта.

Можете ли вы помочь мне?

1 Ответ

1 голос
/ 18 февраля 2020

Документы нуждаются в некотором исправлении, так как в этом есть разные вещи, возвращающие данные не будут иметь никакого значения, так как возвращаемое значение никогда не используется, также вы не можете реально использовать событие beforeFind для настройки кэширования. , он ограничен тем, что он бесполезен, поскольку событие запускается только для некешированных запросов, а для тех, которые запускаются после , проверяется кэш.

как говорится, остановка операции поиска возможна , предоставляя пользовательские результаты, не возвращая данные, а устанавливая их через Query::setResult(), который ожидает экземпляр \Cake\Datasource\ResultSetInterface.

An Примером может быть:

$results = [];
$resultSet = new \Cake\Datasource\ResultSetDecorator($results);
$query->setResult($results);
$event->stopPropagation();

Это приведет к тому, что запрос вернет пустой набор результатов (ResultSetDecorator - это просто коллекция, которая реализует ResultSetInterface), что является ближайшим к «остановке» запрос.

...