Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Table Configurations Laravel Package

vsent/laravel-table-configurations

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require vsent/laravel-table-configurations
    

    Publish the config file (if needed):

    php artisan vendor:publish --provider="Vsent\TableConfigurations\TableConfigurationsServiceProvider"
    
  2. 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',
    ],
    
  3. 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
    

Implementation Patterns

Dynamic Column Rendering

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'));

Integration with Laravel Query Builder

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);

User-Specific Configurations

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());

Blade Directives for Reusability

Create a reusable Blade component:

@component('table-configurations::table', [
    'config' => $config,
    'data' => $users,
    'columns' => $config['columns']
])
@endcomponent

API Integration

Return configurations in API responses:

return response()->json([
    'data' => $users,
    'config' => TableConfigurations::get('admin.users'),
]);

Gotchas and Tips

Configuration Overrides

  • Priority Order: User-specific configs override global configs.
    // Global config (config/table-configurations.php)
    'admin.users' => [...]
    
    // User-specific config (stored in DB)
    TableConfigurations::set('admin.users', [...], auth()->id());
    

Debugging Missing Configs

  • Ensure the config key matches exactly (case-sensitive).
  • Verify the config file is published and loaded:
    php artisan config:clear
    

Performance Considerations

  • Cache configurations if frequently accessed:
    $config = Cache::remember("table_config_{$key}_{$userId}", now()->addHours(1), function () use ($key, $userId) {
        return TableConfigurations::get($key, $userId);
    });
    

Extending Functionality

  • 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
    });
    

Common Pitfalls

  • Undefined Index Errors: Always check if a config exists:
    $config = TableConfigurations::get('admin.users') ?: [];
    
  • Sortable Fields: Ensure database columns match the config keys.
  • Searchable Fields: Use like for partial matches or = for exact matches.

Testing

Mock configurations in tests:

TableConfigurations::shouldReceive('get')
    ->once()
    ->with('admin.users')
    ->andReturn(['columns' => [...]]);
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle