Прямым решением было бы использование троичного оператора :
<tr>
<th>Name 1:</th>
<td>{{ Form::text('name', Auth::user()->can(\Permission::EDIT_INFO) ? [] : ['disabled' => 'disabled']) }}</td>
<th>Name 2:</th>
<td>{{ Form::text('name_ar', Auth::user()->can(\Permission::EDIT_INFO) ? [] : ['disabled' => 'disabled']) }}</td>
</tr>
При этом будет использоваться массив параметров []
в случае Auth::user()->can(\Permission::EDIT_INFO)
и массив ['disabled' => 'disabled']
, если у пользователя нет разрешения.
Но могут быть и более приятные способы сделать это, потому что это решение также будет создавать дублированный код, если у вас есть другие параметры, то есть когда []
не пустой, а что-то вроде ['aria-label' => 'abc', 'maxlength' => 15]
.
Edit:
Вы также можете создать вспомогательный метод, который упрощает использование различных типов параметров в зависимости от наличия разрешения.
Если вы впервые определяете собственный вспомогательный метод, вам понадобится место для его размещения. Для этого вам нужен простой .php
файл, поэтому app/helpers.php
вполне подойдет. Чтобы загрузить вспомогательные методы, вам нужно будет в какой-то момент включить файл - я рекомендую сделать это в методе AppServiceProvider::register()
:
/**
* Register any application services.
*/
public function register()
{
require_once app_path().'/helpers.php';
// other code ...
}
Тогда вам нужно будет определить ваш вспомогательный метод в файле app/helpers.php
:
<?php
if (!function_exists('merge_if_has_permission')) {
function merge_if_has_permission(string $permission, array $base, array $optional): array
{
if (\Auth::user()->can($permission)) {
return array_merge($base, $optional);
}
return $base;
}
}
Затем вы можете использовать эту функцию во внешнем интерфейсе:
<td>{{ Form::text('name', merge_if_has_permission(\Permission::EDIT_INFO, ['maxlength' => 15], ['disabled' => 'disabled'])) }}</td>
Это добавит ['maxlength' => 15, 'disabled' => 'disabled']
к полю формы, если авторизованный в данный момент пользователь имеет разрешение Permission::EDIT_INFO
. Если у пользователя нет этого разрешения, он добавит только ['maxlength' => 15]
.
Поскольку это в точности противоположно тому, что вы спрашиваете (поскольку вы хотели, чтобы поле было отключено, если у пользователя нет разрешения), вам, скорее всего, понадобится другой метод с именем merge_if_hasnt_permission()
- но я думаю, вы найдете твой путь туда сам сейчас.
Более короткие имена методов имеют смысл уменьшить код ... но я подумал, что довольно сложно описать, что функция делает с меньшим количеством слов.
Кстати, вы также можете использовать этот метод для условного переопределения свойств массива $base
.