#laravel #laravel-blade
Вопрос:
Есть ли какой-либо способ, как я могу использовать что-то похожее @can('update', $project)
, но на компоненте?
Следующее не работает;
<x-input @cannot('update', $project) disabled="disabled" @endcannot />
и я не могу этого сделать;
<x-input :disabled="@cannot('update', $project)" />
чтобы получить true
false
значение / в компоненте.
Ответ №1:
Я бы добавил disabled
к реквизиту вашего компонента
@props(['disabled' => false])
<input
@if($disabled) disabled @endif
{{ $attributes }}
/>
Тогда используйте его вот так
<x-input :disabled="Auth::user()->cannot('update', $project)" />
Комментарии:
1. Блестяще, именно то, что я искал! Я использую пользовательские политики, поэтому не совсем уверен, как
Auth::user()
это работает, но это делает то, что мне нужно, поэтому я счастлив. Спасибо!2.
@cannot
является ли сокращение для@if(Auth::user()->cannot('update', $project))
laravel.com/docs/8.x/authorization#via-blade-templates Но он определенно использует политику 🙂3. Хорошо, милая! Связанный с этим вопрос. Есть только
@elsecan
версия этого и нет@else
права? Итак, если я хочу использовать@can
для чего-то, мне также нужен второй блок@cannot
для противоположного?4. О, вообще-то. Кажется, есть и другая версия. Не уверен, что я делал раньше.
5. Очень интересно. Мой редактор ОКР и кода не хотел бы переключать теги для автоматического форматирования, поэтому я буду придерживаться соглашений! Спасибо за объяснение!
Ответ №2:
Почему бы не использовать
@can('update', $project)
<x-input />
@endcan
Комментарии:
1. Спасибо! Проблема в том, что я все еще хочу, чтобы все видели ввод, но добавьте отключение, если вы не можете его отредактировать (конечно, с проверкой на стороне сервера). С вашим решением мне понадобится второй блок с
@cannot
другим входным элементом. Хотелось бы свести его к простому условию или пройти через значение true/false, чтобы отключить.