Installation Begin by installing via Composer:
composer require orchid/platform
Then publish the package assets and configuration:
php artisan vendor:publish --provider="Orchid\Platform\Providers\OrchidServiceProvider" --tag="orchid-config"
php artisan vendor:publish --provider="Orchid\Platform\Providers\OrchidServiceProvider" --tag="orchid-migrations"
php artisan vendor:publish --provider="Orchid\Platform\Providers\OrchidServiceProvider" --tag="orchid-assets"
Run migrations:
php artisan migrate
Initial Setup
Register the OrchidServiceProvider in config/app.php under providers.
Add the middleware to app/Http/Kernel.php:
'web' => [
\Orchid\Platform\Http\Middleware\HandleOrchidRequest::class,
// ... other middleware
],
Configure the admin route in routes/web.php:
Route::middleware(['web', 'orchid'])
->prefix('admin')
->group(base_path('vendor/orchid/platform/src/Routes/admin.php'));
First Use Case: Creating a Screen Scaffold a new screen (dashboard, CRUD, or custom) via Artisan:
php artisan orchid:screens Dashboard
This generates a DashboardScreen class in app/Screens/DashboardScreen.php. Open it and customize the layout using Orchid’s screen builder.
Building Screens
DashboardScreen for static content (widgets, charts).
public function run()
{
return view('dashboard')->with([
'users' => User::count(),
]);
}
Screens\CrudScreen for dynamic data management.
protected $model = User::class;
protected $columns = ['id', 'name', 'email'];
protected $filters = ['name', 'email'];
TextInput, Modal) for bespoke interfaces.
public function run()
{
return [
'title' => 'Custom Screen',
'users' => User::all(),
'form' => new Form([
'name' => '',
'email' => '',
]),
];
}
UI Components
Alert, Button, Table).
public function run()
{
return [
'alert' => new Alert('Success', 'Operation completed!'),
];
}
Component:
namespace App\Components;
use Orchid\Platform\Component\Component;
class StatsCard extends Component
{
public $title;
public $value;
public function __construct($title, $value)
{
$this->title = $title;
$this->value = $value;
}
}
Navigation & Permissions
DashboardServiceProvider:
public function boot()
{
Dashboard::setBreadcrumbs(fn() => Breadcrumbs::make()->push('Dashboard'));
Dashboard::setMenu(Menu::make()->add('Users', 'users')->route('users.index'));
}
can() in screens or middleware:
if (!auth()->user()->can('manage_users')) {
abort(403);
}
Data Management
Repository class for Eloquent models.
use Orchid\Platform\Repositories\Repository;
class UserRepository extends Repository
{
public function scopeActive($query)
{
return $query->where('active', true);
}
}
protected $filters = ['name', 'email', 'active'];
Assets & Theming
php artisan vendor:publish --tag="orchid-assets"
Extend resources/css/orchid.css or resources/js/orchid.js.'dark_mode' => env('ORCHID_DARK_MODE', false),
Route Conflicts
/admin. Ensure no overlap with frontend routes.Route::middleware(['web', 'orchid'])->group(...);
Caching Issues
php artisan orchid:cache:clear
'cache' => [
'enabled' => env('APP_ENV') !== 'local',
],
Model Binding
resolveRouteBinding for model resolution. Ensure your models implement it:
public function resolveRouteBinding($value)
{
return $this->where('slug', $value)->firstOrFail();
}
Permission Denied (403)
can() checks in screens and middleware. Test with:
php artisan orchid:permissions:list
Asset Loading
public/vendor/orchid.@orchidScripts and @orchidStyles in layouts.DashboardServiceProvider:
event(new \Orchid\Platform\Events\ScreenRendering('dashboard'));
dump() or dd() sparingly—Orchid’s debug toolbar (/orchid/toolbar) is more efficient..env:
DB_LOG_QUERIES=true
Custom Screen Types
Extend Screen for unique layouts (e.g., MultiStepScreen):
namespace App\Screens;
use Orchid\Platform\Screen\Screen;
class MultiStepScreen extends Screen
{
public function run()
{
return [
'step1' => new Step1(),
'step2' => new Step2(),
];
}
}
Override Default Screens
Replace Orchid’s default screens (e.g., SettingsScreen) by publishing and modifying:
php artisan vendor:publish --tag="orchid-screens"
API Integration
Use Orchid’s Http\Resources for API-like responses in screens:
return [
'data' => UserResource::collection(User::all()),
];
Localization Extend translations by publishing language files:
php artisan vendor:publish --tag="orchid-lang"
Override in resources/lang/vendor/orchid.
Testing Use Orchid’s test helpers:
use Orchid\Testing\TestCase;
public function testDashboardAccess()
{
$this->actingAsUser(factory(User::class)->create())
->get('/admin')
->assertStatus(200);
}
orchid:screen Artisan Commands:
php artisan orchid:screens:list # List all screens
php artisan orchid:permissions:create role:admin # Create roles
orchid:import for bulk data seeding.orchid/medialibrary).How can I help you explore Laravel packages today?