Как заставить новую функцию Policy Auto-Discovery Laravel работать с моими моделями в другой папке? - PullRequest
2 голосов
/ 31 марта 2019

Я только что обновил свой Laravel до 5.8 и не могу сделать автоматическое обнаружение моих политик.

Я думаю, это потому, что все мои модели находятся в приложении / Моделях . В документации сказано, что я могу изменить поведение по умолчанию, используя эти ворота.

Gate::guessPolicyNamesUsing(function ($modelClass) {
    // return policy class name...
});

Но я не могу заставить это работать. Функция проверки '' '$ user-> can ()' '' всегда возвращает false для всех моих политик и моделей. Это действительно проблема? Папка моделей, или мне не хватает somenting?

Кстати, все отлично работает, если я сопоставлю его вручную в массиве $ policy в AuthServiceProvider.php

Спасибо!

1 Ответ

3 голосов
/ 02 апреля 2019

Если у кого-то есть такая проблема, вот как я ее исправил.

Оказалось, что проблема была в структуре App/Models. магия , созданная laravel для определения имени политики, учитывает местоположение модели.

Чтобы обойти это поведение, поместите приведенный ниже код внутрь app/Providers/AuthServiceProvider.php в функцию загрузки.

Gate::guessPolicyNamesUsing(function ($modelClass) {
    return 'App\\Policies\\' . class_basename ( $modelClass).'Policy';
});

Это заставит смотреть на App/Policies вместо App/Models/Policies. (изменить соответственно)

А потом я понял, что папка Policies должна быть размещена внутри App/Models, потому что именно там находится модель, но, эй, кто знает? Полагаю, что размещение моих моделей в другой папке усложнит мне жизнь.

Пока, надеюсь помочь кому-нибудь в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...