PHP code example of reedware / nova-select-toggle-field
1. Go to this page and download the library: Download reedware/nova-select-toggle-field library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
reedware / nova-select-toggle-field example snippets
public function fields(Request $request)
{
return [
Select::make('Target Field', 'target_field')
->options([
/* ... values => labels ... */
]),
SelectToggle::make('Toggle Field', 'toggle_field')
->target('target_field')
->options(function($targetValue) {
/**
* $targetValue is the in-flight form value from the "target_field" field.
* Use this value to return your dynamically generated list. The value
* will be the value from the target, not the label within the UI.
*/
return [
/* ... values => labels ... */
];
})
];
}
public function fields(Request $request)
{
return [
Select::make('Group', 'group_name')
->help('The group containing the resource.')
->options(
collect(Nova::$resources)->mapWithKeys(function($resource) {
return [$resource::$group => str_replace('.', ' > ', $resource::$group)];
})->unique()->sort()
),
SelectToggle::make('Resource', 'resource_name')
->help('The resource within the group.')
->target('group_name')
->options(function($targetValue) {
return collect(Nova::$resources)->filter(function($resource) use ($targetValue) {
return $resource::$group == $targetValue;
})->mapWithKeys(function($resource) {
return [$resource => $resource::label()];
})->sort()->toArray();
})
];
}
/**
* Returns the fields displayed by the resource.
*
* @param \Illuminate\Http\Request $request
*
* @return array
*/
public function fields(Request $request)
{
return [
// "Resource" field
Field::select(__('Resource'), 'resource_name')
->help('The resource tied to this permission.')
->et('resource_name')
->options(function($targetValue) {
return $this->getPolicyMethodOptions($targetValue);
})
->displayUsing(function($value) {
return static::getLabelForAbility($value);
})
->valueToggle(function($toggle) {
return $toggle->whereNotNull('resource_name');
}),
// "Ability" (on Update form)
Field::text(__('Ability'), 'ability_name')
->onlyOnForms()
->hideWhenCreating()
->help('The ability name of this permission.')
->readonly()
->resolveUsing(function($value) {
return static::getLabelForAbility($value);
}),
// "Ability" (on Display & Index)
Field::text(__('Ability'), 'ability_name')
->exceptOnForms()
->displayUsing(function($value) {
return static::getLabelForAbility($value);
})
];
}
/**
* Returns the permission resource options.
*
* @return array
*/
public function getPermissionResourceOptions()
{
// Determine all of the resources
$resources = collect(Nova::$resources);
// Filter to only resources that have policies
$resources = $resources->filter(function($resource) {
return !is_null(Gate::getPolicyFor($resource::$model));
});
// Convert the resources into selection options
$options = $resources->map(function($resource) {
return [
'label' => __($resource::label()),
'value' => $resource,
'group' => str_replace('.', ' > ', $resource::$group)
];
});
// Sort the options
$options = $options->sortBy(function($option) {
return str_pad($option['group'], 255) . '.' . str_pad($option['label'], 255);
});
// Exclude the resources that won't have any selectable abilities
$options = $options->filter(function($option) {
return !empty($this->getPolicyMethodOptions($option['value']));
});
// Return the options
return $options->all();
}
/**
* Returns the policy method options for the specified resource.
*
* @param string $resource
*
* @return array
*/
public function getPolicyMethodOptions($resource)
{
// Determine the model from the resource
$model = $resource::$model;
// Determine the policy for the model
$policy = Gate::getPolicyFor($model);
// Determine the policy methods
$methods = $policy::getPermissableMethods();
// Determine the existing options
$existing = static::newModel()->newQuery()->where('resource_name', $resource)->pluck('ability_name')->toArray();
// Filter out the existing options
$remaining = array_filter($methods, function($method) use ($existing) {
return !in_array($method, $existing);
});
// Include the current option
if($this->exists && $resource == $this->resource_name) {
$options[] = $this->ability_name;
}
// Determine the method options
$options = collect($remaining)->mapWithKeys(function($ability) {
return [$ability => static::getLabelForAbility($ability)];
});
// Return the options
return $options->all();
}
/**
* Returns the label for the specified ability.
*
* @param string $ability
*
* @return string
*/
public static function getLabelForAbility($ability)
{
return Str::title(Str::snake($ability, ' '));
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.