Компонент Laravel/blade с условиями

#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, чтобы отключить.