capell-app/admin
Filament panel package for Capell CMS that provides the authenticated editor and operator back-office UI: manage pages, sites, languages, layouts, themes, media, users, roles, settings, packages, and upgrades, with admin extension points. Requires capell-app/core.
Installation
composer require capell-app/admin
Publish the package assets and config:
php artisan vendor:publish --provider="CapellApp\Admin\AdminServiceProvider" --tag="admin-config"
php artisan vendor:publish --provider="CapellApp\Admin\AdminServiceProvider" --tag="admin-assets"
Register the Admin Panel
Add the admin panel to your routes/web.php:
use CapellApp\Admin\Facades\Admin;
Admin::routes();
First Use Case: Basic CRUD Define a resource in a service provider or module:
use CapellApp\Admin\Resources\Resource;
Admin::resource('posts', \App\Models\Post::class)
->title('Posts')
->columns(['id', 'title', 'published_at'])
->editColumns(['title', 'content', 'published_at']);
Access the Admin Panel
Visit /admin (or your configured route) and authenticate via Laravel’s default auth or a custom guard.
Dynamic Registration
Register resources programmatically in a service provider’s boot() method:
Admin::resource('users', \App\Models\User::class)
->title('Users')
->navigationGroup('System')
->navigationOrder(10);
Customizing Forms/Tables Override default views or use Filament’s widgets:
Admin::resource('posts')
->form(function (\CapellApp\Admin\Resources\Form $form) {
$form->addComponents([
\Filament\Forms\Components\RichEditor::make('content')->columnSpanFull(),
]);
});
Inline Editing Enable inline editing for tables:
Admin::resource('posts')
->table(function (\CapellApp\Admin\Resources\Table $table) {
$table->column('title')->editable();
});
Media Library Integration Attach a media manager to resources:
Admin::resource('posts')
->form(function (\CapellApp\Admin\Resources\Form $form) {
$form->addComponents([
\Filament\Forms\Components\FileUpload::make('thumbnail')
->image()
->directory('post-thumbnails'),
]);
});
config/admin.php or via a dedicated resource:
Admin::settings(function () {
return \App\Admin\Settings::class;
});
Create a settings model:
namespace App\Admin;
use CapellApp\Admin\Settings\Contracts\Settings;
class Settings implements Settings {
public static function getTitle(): string {
return 'Site Settings';
}
public function form(\Filament\Forms\Form $form): void {
$form->schema([
\Filament\Forms\Components\TextInput::make('site_name'),
]);
}
}
Custom Pages Register custom admin pages:
Admin::page('reports', \App\Admin\Pages\ReportsPage::class)
->title('Reports')
->icon('heroicon-o-chart-bar');
Middleware & Policies Apply middleware to admin routes:
Admin::middleware(['verified', 'can:manage-admin']);
Use Filament’s built-in policies:
Admin::resource('posts')->authorizeResourcePolicy(\App\Policies\PostPolicy::class);
Actions & Bulk Actions Add custom actions to tables:
Admin::resource('posts')
->table(function (\CapellApp\Admin\Resources\Table $table) {
$table->actions([
\CapellApp\Admin\Resources\Actions\EditAction::make(),
\CapellApp\Admin\Resources\Actions\DeleteAction::make(),
]);
});
Event Listeners
Listen to resource events (e.g., saved, deleted):
Admin::resource('posts')->listen(function ($record) {
event(new \App\Events\PostUpdated($record));
});
Route Conflicts
/admin doesn’t clash with existing routes. Use Admin::prefix('custom-admin') to override.Authentication Bypass
Admin::authGuard('admin');
Resource Caching
php artisan view:clear
Filament Version Mismatch
filament/filament is installed and compatible:
composer require filament/filament:^3.0
Translation Issues
php artisan vendor:publish --tag="admin-translations"
Log Admin Events
Enable debug mode in config/admin.php:
'debug' => env('ADMIN_DEBUG', false),
Check logs at storage/logs/laravel.log.
Inspect Resource Definitions Dump registered resources:
dd(\CapellApp\Admin\Facades\Admin::getResources());
Disable JavaScript Errors For development, disable Filament’s JS validation:
Admin::disableValidation();
Custom Widgets Extend Filament widgets for admin dashboards:
Admin::dashboard(function (\CapellApp\Admin\Dashboard $dashboard) {
$dashboard->widget(\App\Widgets\StatsOverview::class);
});
API Endpoints Expose admin resources via API:
Admin::resource('posts')->apiResource();
Theming Override default styles by publishing assets and extending:
/* resources/css/admin/custom.css */
.filament-admin {
--color-primary: #2563eb;
}
Multi-Tenancy Use Filament’s tenant middleware:
Admin::middleware(['tenant']);
Localization
Override translations in resources/lang/vendor/admin/...:
'resources' => [
'posts' => [
'title' => 'Blog Entries',
],
],
Eager Load Relationships Optimize resource queries:
Admin::resource('posts')->query(function ($query) {
return $query->with(['author', 'category']);
});
Lazy Load Assets Disable unnecessary JS/CSS:
Admin::disableAssets(['unnecessary-widget']);
Database Indexing
Ensure id and created_at columns are indexed for large datasets.
How can I help you explore Laravel packages today?