vsent/laravel-table-configurations
Installation
composer require vsent/laravel-table-configurations
Publish the config file (if needed):
php artisan vendor:publish --provider="Vsent\TableConfigurations\TableConfigurationsServiceProvider"
Basic Usage
Define a table configuration in config/table-configurations.php:
'admin.users' => [
'columns' => [
'id' => ['label' => 'ID', 'sortable' => true],
'name' => ['label' => 'Full Name'],
'email' => ['label' => 'Email Address', 'searchable' => true],
],
'default_sort' => 'name',
],
First Use Case In a controller or blade view, retrieve and apply configurations:
use Vsent\TableConfigurations\Facades\TableConfigurations;
$config = TableConfigurations::get('admin.users');
$users = User::query()->get();
return view('admin.users.index', compact('users', 'config'));
In Blade:
@foreach($users as $user)
<tr>
<td>{{ $user->id }}</td>
<td>{{ $user->name }}</td>
<td>{{ $user->email }}</td>
</tr>
@endforeach
Use the package to dynamically render columns based on user preferences or roles:
$config = TableConfigurations::get('admin.users');
$columns = collect($config['columns'])->pluck('label', 'key');
return view('admin.users.index', compact('columns'));
Leverage the searchable and sortable flags for dynamic filtering:
$query = User::query();
if ($config['default_sort']) {
$query->orderBy($config['default_sort']);
}
if (request('search')) {
$query->where(function ($q) use ($config) {
foreach ($config['columns'] as $field => $options) {
if ($options['searchable'] ?? false) {
$q->orWhere($field, 'like', '%' . request('search') . '%');
}
}
});
}
$users = $query->paginate(10);
Store configurations per user in a user_table_configurations table:
// Save user-specific config
TableConfigurations::set('admin.users', $customConfig, auth()->id());
// Retrieve user-specific config (fallback to default)
$config = TableConfigurations::get('admin.users', auth()->id());
Create a reusable Blade component:
@component('table-configurations::table', [
'config' => $config,
'data' => $users,
'columns' => $config['columns']
])
@endcomponent
Return configurations in API responses:
return response()->json([
'data' => $users,
'config' => TableConfigurations::get('admin.users'),
]);
// Global config (config/table-configurations.php)
'admin.users' => [...]
// User-specific config (stored in DB)
TableConfigurations::set('admin.users', [...], auth()->id());
php artisan config:clear
$config = Cache::remember("table_config_{$key}_{$userId}", now()->addHours(1), function () use ($key, $userId) {
return TableConfigurations::get($key, $userId);
});
Custom Column Types: Add logic for custom column renderers:
TableConfigurations::extend('status', function ($value, $config) {
return '<span class="badge ' . ($value ? 'bg-success' : 'bg-danger') . '">' . $value . '</span>';
});
Event Hooks: Listen for config updates:
TableConfigurations::onUpdate(function ($key, $config, $userId) {
// Log or broadcast changes
});
$config = TableConfigurations::get('admin.users') ?: [];
like for partial matches or = for exact matches.Mock configurations in tests:
TableConfigurations::shouldReceive('get')
->once()
->with('admin.users')
->andReturn(['columns' => [...]]);
How can I help you explore Laravel packages today?