krafthaus/bauhaus
Bauhaus is a Laravel 4 admin generator for building clean admin interfaces with model-driven lists, forms, filters, scoping, and exporting. Includes asset/config publishing, multilingual UI, and integrates with Intervention Image for media handling.
Installation:
composer require krafthaus/bauhaus
php artisan asset:publish krafthaus/bauhaus
php artisan config:publish krafthaus/bauhaus
Service Provider:
Ensure Krafthaus\Bauhaus\BauhausServiceProvider is registered in config/app.php under providers.
First Use Case:
User) and generate a CRUD interface:
// routes.php
Route::resource('admin/users', 'Admin\UserController');
Krafthaus\Bauhaus\Controllers\BauhausController:
namespace App\Http\Controllers\Admin;
use Krafthaus\Bauhaus\Controllers\BauhausController;
class UserController extends BauhausController {
protected $model = 'App\User';
}
/admin/users to see the auto-generated admin panel.$model).config/bauhaus.php (e.g., default columns, filters, or form fields).php artisan build (if using Laravel Mix) to compile Bauhaus assets.CRUD Generation:
BauhausController and set $model to auto-generate list/views/edit forms.$columns, $filters, or $formFields in the controller:
protected $columns = ['id', 'name', 'email'];
protected $filters = ['name', 'email'];
protected $formFields = ['name', 'email', 'password'];
Scoping and Filtering:
$scopes to define model query scopes:
protected $scopes = ['active', 'inactive'];
/admin/users?name=John).Exporting Data:
export to $columns:
protected $columns = ['id', 'name', 'email', 'export'];
Custom Views:
php artisan vendor:publish --tag=bauhaus-views
resources/views/vendor/bauhaus/ to customize layouts, forms, or lists.spatie/laravel-permission for role-based access.$formFields:
protected $formFields = [
'name' => ['rules' => 'required|max:255'],
'email' => ['rules' => 'required|email']
];
$columns:
protected $columns = ['id', 'name', 'posts.count'];
config/bauhaus.php:
'locale' => 'nl', // Dutch
Asset Publishing:
php artisan asset:publish krafthaus/bauhaus may break CSS/JS.Model Not Found:
$model property in your controller matches a fully qualified namespace (e.g., App\User).composer dump-autoload).Configuration Overrides:
config/bauhaus.php may conflict with controller-specific settings.mergeConfigFrom in your controller to override defaults:
public function __construct() {
$this->mergeConfigFrom(__DIR__.'/bauhaus.php', 'bauhaus');
}
Database Scoping Issues:
$scopes must exist as model methods (e.g., scopeActive).public function scopeActive($query) {
return $query->where('active', 1);
}
config/database.php to debug scope/filter issues.dd() or dump() in custom views to inspect data.resources/views/vendor/bauhaus/layouts/app.blade.php.Custom Columns:
StatusColumn class in app/Bauhaus/Columns.Filters:
Krafthaus\Bauhaus\Filters\Filter:
namespace App\Bauhaus\Filters;
use Krafthaus\Bauhaus\Filters\Filter;
class CustomFilter extends Filter {
public function apply($query) {
return $query->where('custom_field', $this->value);
}
}
Events:
bauhaus.saving, bauhaus.deleting) in EventServiceProvider:
protected $listen = [
'bauhaus.saving' => ['App\Listeners\LogAdminAction'],
];
Middleware:
Route::group(['middleware' => 'admin'], function () {
Route::resource('admin/users', 'Admin\UserController');
});
PUT requests with Bauhaus to update specific fields without reloading the entire form.bulk to $columns and implementing bulkAction in your controller.$this->get('/admin/users')->assertStatus(200);
How can I help you explore Laravel packages today?