infyomlabs/laravel-ui-stisla
InfyOm Laravel UI Stisla is a Laravel UI preset that scaffolds authentication screens and admin layouts using the Stisla Bootstrap dashboard theme, giving Laravel applications a clean, responsive backend interface with familiar Blade views and less setup effort.
v4.0.0 is the first release in this line with Laravel 9 support, which makes it the entry point for any project on Laravel 9 — and a mandatory upgrade for existing installs that need to move. Start by confirming your platform floor: Laravel 9 requires PHP 8.0+, so the package's composer.json will now reflect that. Check it before you touch your lock file:
composer require vendor/package:^4.0
composer why-not vendor/package 4.0 # if resolution fails, shows the blocker
Then locate the integration surface in this order:
php artisan vendor:publish --provider="Vendor\Package\PackageServiceProvider" (or --tag=package-config). Read the defaults and every env() call; this is where 80% of behaviour is decided.Your first use case should be deliberately small: wire the package into one controller action or queued job, cover it with a single feature test that uses the package's fake or a mocked contract, and confirm it works under php artisan config:cache before rolling it across the codebase.
Resolve from the container, never with app(). Inject the package's contract or facade into constructors and let Laravel resolve it. This is also what makes the package swappable in tests and in multi-tenant setups where the binding changes per request.
public function __construct(private \Vendor\Package\Contracts\Client $client) {}
Keep all configuration in config/package.php, and reference env() only there. If the package reads env() at runtime, it will silently break under config:cache in production — a classic post-deploy incident.
Version-pin in composer.json with a caret, and test both edges. If you still support Laravel 8 alongside 9, run a CI matrix:
matrix:
laravel: [^8.0, ^9.0]
php: [8.0, 8.1]
Add one --prefer-lowest leg so you catch a too-loose constraint rather than discovering it in a customer install.
Upgrade as an isolated change. Branch, bump the constraint, run the full suite, then grep for the Laravel 8 idioms Laravel 9 removed — $dates on models, str_*/array_* helpers that moved to Illuminate\Support\Str, and any doctrine/dbal-dependent column changes. A package major that tracks a framework major often drags these along with it.
Wrap third-party calls behind your own thin service. The package is an implementation detail; your application code should call App\Services\Thing, which delegates to the package. When v5 lands, one file changes instead of thirty.
Use the package's test doubles in feature tests and the real thing in integration tests. Fakes keep the suite fast and deterministic; a small integration suite (often tagged and excluded from the default run) catches the wiring mistakes fakes hide — misconfigured credentials, wrong queue connection, missing migration.
For queued work, make handlers idempotent. Anything dispatched through the package can be retried; guard against duplicate side effects with an idempotency key or an existence check rather than assuming single delivery.
composer require fails, composer why-not vendor/package 4.0 names the package holding you back — often a dev dependency (PHPUnit bridge, static analysis tooling, an old Laravel Debugbar) rather than a runtime one.php artisan config:clear (and cache:clear if the package registers routes or views) after publishing or editing the config file — an old cached config is the most common "the package is broken" false alarm.vendor:publish --tag=... avoids overwriting files you've already customised. Never publish and commit a config file whose only difference from the default is comments.dd(). php artisan about, php artisan tinker + app()->bound(Contract::class), and the provider's register()/boot() split will tell you far more about why a binding isn't resolving than dumping a facade call.storage/logs/laravel.log during the test run; a green suite with a noisy log is a v5 upgrade that's already overdue.How can I help you explore Laravel packages today?