baks-dev/dashboard
BaksDev Dashboard — PHP 8.4+ модуль панели управления для проектов BaksDev. Установка через Composer, поддержка установки ассетов (baks:assets:install) и миграций Doctrine. Тесты запускаются через PHPUnit (group=dashboard).
Installation
composer require baks-dev/dashboard
php artisan vendor:publish --provider="BaksDev\Dashboard\DashboardServiceProvider" --tag="dashboard-config"
php artisan vendor:publish --provider="BaksDev\Dashboard\DashboardServiceProvider" --tag="dashboard-migrations"
php artisan migrate
Asset Installation
php artisan baks:assets:install
npm run dev # or `npm run build` for production
First Use Case Register a dashboard widget via a service provider:
// app/Providers/DashboardServiceProvider.php
public function register()
{
Dashboard::widget('stats', StatsWidget::class);
}
Where to Look First
config/dashboard.php (widgets, permissions, layout)app/Dashboard/Widgets/ (default location for custom widgets)resources/views/vendor/dashboard/ (overridable templates)app/Console/Kernel.php (check baks:assets:install and baks:widgets:clear)Widget Development
BaksDev\Dashboard\Contracts\Widget:
namespace App\Dashboard\Widgets;
use BaksDev\Dashboard\Contracts\Widget;
class StatsWidget implements Widget
{
public function render(): string
{
return view('dashboard.widgets.stats')->render();
}
public function title(): string
{
return 'System Stats';
}
}
Dashboard::widget() in a service provider.Layout Customization
php artisan vendor:publish --tag="dashboard-views"
resources/views/dashboard/layout.blade.php.Dynamic Widget Loading
Dashboard::widgets() to fetch registered widgets dynamically:
$widgets = Dashboard::widgets()->where('user_id', auth()->id())->get();
Authorization
Dashboard::widget('stats')->authorize(StatsPolicy::class);
Dashboard::widget('stats')->gate('view_dashboard_stats');
Asset Management
public function assets(): array
{
return [
'css' => ['/css/widgets/stats.css'],
'js' => ['/js/widgets/stats.js'],
];
}
API Integration
Route::get('/dashboard/widgets/stats', [StatsWidget::class, 'api']);
resources/js/dashboard.js is included in your main JS file.public function render(): string
{
return view('dashboard.widgets.livewire-stats', [
'stats' => LivewireStats::class,
]);
}
php artisan baks:widgets:clear
Asset Pipeline Conflicts
php artisan baks:assets:install).npm run dev).assets() method.Widget Registration Order
Dashboard::widget('app.stats', StatsWidget::class); // Prefix with app namespace
Permission Caching
php artisan cache:clear
php artisan view:clear
Database Schema Mismatches
php artisan doctrine:migrations:migrate).dashboard_widgets table exists and matches the schema.Blade Template Overrides
php artisan vendor:publish --tag="dashboard-views"
Widget Not Rendering?
dd(Dashboard::widgets()->toArray());
Widget.Permission Issues
auth()->user()->can('view_dashboard') in a route middleware.Asset Loading Failures
/css/dashboard/*.css.public_path() is correctly referenced in widget assets.Dashboard Layout
config/dashboard.php:
'layout' => [
'columns' => 3,
'rows' => 2,
],
Widget Persistence
'widgets' => [
'persist_user_preferences' => false,
],
Fallback Widgets
'defaults' => [
'widgets' => ['stats', 'recent-activity'],
],
Custom Widget Storage
Dashboard::setWidgetRepository(CustomWidgetRepository::class);
Event Listeners
WidgetRegistered):
Dashboard::widget('stats')->listen(function ($widget) {
event(new StatsWidgetLoaded($widget));
});
Middleware
Dashboard::middleware('auth:admin');
Testing
DashboardTestCase trait:
use BaksDev\Dashboard\Testing\DashboardTestCase;
class StatsWidgetTest extends DashboardTestCase
{
public function test_widget_renders()
{
$this->assertDashboardWidget('stats');
}
}
```markdown
## Additional Notes for Laravel Developers
- **Laravel 10+ Compatibility**: Ensure `config/app.php` includes the service provider:
```php
BaksDev\Dashboard\DashboardServiceProvider::class,
public function render(): string
{
dispatch(new RefreshStatsJob());
return view('dashboard.widgets.stats');
}
setLocale():
Dashboard::setLocale('ru');
'theme' => [
'dark_mode' => env('DASHBOARD_DARK_MODE', false),
],
How can I help you explore Laravel packages today?