elasticms/admin-ui-bundle
Laravel admin UI bundle for building ElasticMS back-office screens fast. Provides ready-made layout, navigation, forms, tables, and common CRUD components with configurable styling and assets, streamlining integration into existing apps.
Installation:
composer require elasticms/admin-ui-bundle
Add to config/app.php under providers:
Elasticms\AdminUIBundle\AdminUIServiceProvider::class,
Publish assets and config:
php artisan vendor:publish --provider="Elasticms\AdminUIBundle\AdminUIServiceProvider" --tag="config"
php artisan vendor:publish --provider="Elasticms\AdminUIBundle\AdminUIServiceProvider" --tag="assets"
First Use Case:
ContentTypes or MediaLibrary) by configuring config/admin-ui.php:
'modules' => [
'content_types' => true,
'media_library' => true,
],
/admin (route defined in the bundle).Key Files to Inspect:
config/admin-ui.php: Central configuration for modules, navigation, and theming.resources/views/vendor/admin-ui/: Override default Blade templates here.routes/admin.php: Extend or modify admin routes.config/admin-ui.php under the modules key. Example:
'modules' => [
'users' => [
'enabled' => true,
'icon' => 'fas fa-user',
'order' => 1,
],
],
config/admin-ui.php:
'custom_modules' => [
\App\Admin\CustomModule\CustomModuleServiceProvider::class,
],
config/admin-ui.php:
'navigation' => [
'items' => [
[
'label' => 'Content',
'icon' => 'fas fa-file-alt',
'route' => 'admin.content_types.index',
'children' => [
['label' => 'Posts', 'route' => 'admin.posts.index'],
],
],
],
],
php artisan vendor:publish --provider="Elasticms\AdminUIBundle\AdminUIServiceProvider" --tag="views"
Edit resources/views/vendor/admin-ui/layouts/app.blade.php.ContentType, Media) and generates CRUD interfaces. Customize behavior via:
'crud' => [
'ContentType' => [
'columns' => ['name', 'handle', 'description'],
'edit' => [
'exclude_fields' => ['created_at', 'updated_at'],
],
],
],
Elasticms\AdminUIBundle\Http\Controllers\AdminController:
namespace App\Http\Controllers\Admin;
use Elasticms\AdminUIBundle\Http\Controllers\AdminController;
class PostsController extends AdminController
{
protected $model = \App\Models\Post::class;
}
resources/assets/admin/ and include them in resources/views/vendor/admin-ui/layouts/app.blade.php:
@stack('admin-scripts')
php artisan vendor:publish --provider="Elasticms\AdminUIBundle\AdminUIServiceProvider" --tag="vue"
Gate::define('manage-content', function ($user) {
return $user->hasRole('admin');
});
Then restrict a module in config/admin-ui.php:
'modules' => [
'content_types' => [
'enabled' => true,
'gate' => 'manage-content',
],
],
ElasticMS-Specific Features:
ContentType models.API-Driven Admin Panels:
'api' => [
'enabled' => true,
'prefix' => 'api/admin',
],
Testing:
$this->actingAs($adminUser)
->get('/admin/content-types')
->assertStatus(200);
Deployment:
npm run dev # or `npm run prod` for production
php artisan admin-ui:assets
ElasticMS Dependency:
Asset Compilation:
vendor/elasticms/admin-ui-bundle/resources/assets/.Route Conflicts:
/admin. Ensure these don’t conflict with existing routes. Use middleware to restrict access:
Route::prefix('admin')->middleware(['auth', 'admin'])->group(function () {
// Admin routes
});
Vue Version Mismatch:
Database Migrations:
users) may require migrations. Run:
php artisan migrate
after installation.Caching Issues:
php artisan view:clear
php artisan cache:clear
npm run dev
Log Configuration:
config/admin-ui.php:
'debug' => env('APP_DEBUG', false),
storage/logs/laravel.log.Template Overrides:
resources/views/vendor/admin-ui/
├── layouts/
│ └── app.blade.php
├── modules/
│ └── content_types/
│ ├── index.blade.php
│ └── edit.blade.php
Module-Specific Issues:
config/admin-ui.php to isolate issues:
'modules' => [
'content_types' => false, // Disable temporarily
'media_library' => true,
],
Vue Debugging:
app.blade.php:
<script src="https://unpkg.com/vue-devtools"></script>
Custom Fields:
namespace App\Providers;
use Elasticms\AdminUIBundle\Extensions\FieldExtensionInterface;
use Illuminate\Support\ServiceProvider;
class CustomFieldProvider extends ServiceProvider
{
public function register()
{
$this->app->bind(FieldExtensionInterface::class, \App\Extensions\CustomField::class);
}
}
Event Listeners:
AdminModuleLoaded) in EventServiceProvider:
protected $listen = [
'Elasticms\AdminUIBundle\Events\AdminModuleLoaded' => [
\App\Listeners\LogAdminModuleLoad::class,
],
];
API Extensions:
How can I help you explore Laravel packages today?