2016-03-10 2 views
1

Когда я реализовал это (https://mattstauffer.co/blog/acl-access-control-list-authorization-in-laravel-5-1) Laravel разрешение 5,1 учебник, я нашел использование этогоLaravel 5,1 Призыв к неопределенным метод Illuminate Auth Access Gate :: позволяют()

if (Gate::allows('create-contact')) { 
    redirect('hooray'); 
} 

И тогда структура показывает мне эту ошибку

Call to undefined method Illuminate\Auth\Access\Gate::allow() 

Все в порядке с зависимостями, так что это не проблема, то я обнаружил, что Laravel начал реализовывать этот метод начиная с версии 5.1.11 в этой теме на Laravel-х Документы для авторизации on (laraveldocs/5.1/authorization) Так, команда laravel говорит на своей странице документации, что эта функция авторизации доступна с версии 5.1.11.

Я получал ту же ошибку, поэтому я пошел в репозиторий laravel/framework на github (github/laravel/framework /) и проверил с версии 5.1.11 по 5.1.31 и обнаружил, что метода не существует в исходном коде.

Этот метод ворот доступен, начиная с версии 5.2

Вы можете проверить оба здесь v5.1 (GitHub/Laravel/рамки/BLOB/v5.1.31/SRC/Осветите/Контракты/Auth/Access/Gate.php) и для v5.2 (github/laravel/framework/blob/v5.2.0/src/Illuminate/Contracts/Auth/Access/Gate.php)

Поэтому я хотел поделиться с вами этими знаниями, но если вы найдете решение, не обновляя версию фреймворка, я был бы рад узнать.

Спасибо!

+0

Это всего лишь идея (я не говорю, что вы должны это делать), но если вы действительно не можете обновить всю фреймворк до 5.2, можете ли вы просто потянуть в пакет 5.2, который вам нужен, а именно: Освещает \ Auth' https://packagist.org/packages/illuminate/auth#v5.2.0? – haakym

ответ

0

Я думаю, что это только результат опечатки в вашем коде. Метод называется allows, но ваша ошибка сообщает allow (как в единственном числе из allows):

Call to undefined method Illuminate\Auth\Access\Gate::allow() 
//       This should be "allows" ^^^^^ 

Illuminate\Contracts\Auth\Access\Gateинтерфейс вы ссылаетесь только договор о том, что Gate класс должен реализовывать , только потому, что метод allows не требуется этим, что не означает, что он не реализован. Фактически это осуществляется Illuminate\Auth\Access\Gate, что является фактическим implementation that is bound to that contract.

+0

спасибо, но это было специально, думая о том, что это было в особом смысле. –

+0

Не думаю, что я действительно понимаю. Вы имеете в виду, что хотите, чтобы его называли 'allow' (единственное число)? И использование правильного 'allow' (множественного числа) не устраняет проблему? – Bogdan

+0

Да, я использовал оба и все еще имею проблему. –

Смежные вопросы