avris/micrus
Micrus is a Laravel-friendly microservices toolkit for building lightweight services and messaging workflows. It helps you structure service boundaries, handle inter-service communication, and keep integrations consistent with a minimal, package-driven approach.
Installation
composer require avris/micrus
Add the service provider to config/app.php:
'providers' => [
// ...
Avris\Micrus\MicrusServiceProvider::class,
],
Basic Routing
Define routes in routes/web.php:
use Avris\Micrus\Facades\Micrus;
Micrus::get('/', 'HomeController@index');
Micrus::post('/submit', 'FormController@store');
First Controller
Create a controller (e.g., app/Http/Controllers/HomeController.php):
namespace App\Http\Controllers;
use Avris\Micrus\Http\Controllers\Controller;
class HomeController extends Controller {
public function index() {
return response()->json(['message' => 'Hello, Micrus!']);
}
}
Run the Server
php artisan serve
Test with curl http://localhost:8000.
Avris\Micrus\Facades\Micrus (Facade for routing).Avris\Micrus\Http\Controllers\Controller (Base controller).Avris\Micrus\Support\Helper (Utility functions).php artisan vendor:publish --provider="Avris\Micrus\MicrusServiceProvider".// routes/web.php
Micrus::get('/api/users', 'UserController@index');
Micrus::post('/api/users', 'UserController@store');
// app/Http/Controllers/UserController.php
class UserController extends Controller {
public function index() {
return response()->json(User::all());
}
public function store(Request $request) {
$user = User::create($request->all());
return response()->json($user, 201);
}
}
Resourceful Routing
Use Micrus::resource() for RESTful conventions:
Micrus::resource('posts', 'PostController');
Generates: GET|HEAD /posts, POST /posts, GET /posts/{id}, etc.
Middleware Integration Attach middleware to routes:
Micrus::get('/admin', 'AdminController@dashboard')
->middleware('auth:admin');
Route Groups Group routes with shared prefixes/middleware:
Micrus::prefix('api/v1')->group(function () {
Micrus::get('/users', 'UserController@index');
Micrus::post('/users', 'UserController@store');
});
Dependency Injection Inject services into controllers:
class UserController extends Controller {
protected $userService;
public function __construct(UserService $userService) {
$this->userService = $userService;
}
}
Request Validation Use Laravel’s built-in validation:
public function store(Request $request) {
$validated = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email',
]);
// ...
}
View Responses Return Blade views:
public function index() {
return view('users.index', ['users' => User::all()]);
}
API Development
response()->json() for API responses.Micrus::apiResource() for API-specific resource routing.Form Handling
Micrus::post() for form submissions.return redirect()->route('route.name').Authentication
Micrus::get('/dashboard', 'DashboardController@index')
->middleware('auth');
Error Handling
app/Exceptions/Handler.php.throw new \Avris\Micrus\Http\Exceptions\HttpResponseException($response).Namespace Conflicts
App\Http\Controllers or update autoloading:
composer dump-autoload
Route Caching
php artisan route:clear
Middleware Order
->middleware() carefully:
// Wrong: Overrides previous middleware
Micrus::get('/test')->middleware('auth')->middleware('log');
// Correct: Appends middleware
Micrus::get('/test')->middleware(['auth', 'log']);
CSRF Protection
Micrus::middleware('web')->group(function () {
Micrus::post('/form', 'FormController@submit');
});
Route Listing Dump all routes:
php artisan route:list
Request Dumping
Use dd($request->all()) or dd($request) in controllers.
Error Logging
Configure config/logging.php for detailed logs.
Facade Debugging Check if the facade is bound correctly:
dd(app('micrus'));
Custom Facade Bindings
Extend the facade in AppServiceProvider:
public function boot() {
\Avris\Micrus\Facades\Micrus::extend('custom', function () {
return new CustomRouter();
});
}
Service Provider Hooks Override Micrus’s service provider:
class CustomMicrusServiceProvider extends \Avris\Micrus\MicrusServiceProvider {
public function register() {
parent::register();
// Custom logic
}
}
View Composers Use Laravel’s composers for shared data:
View::composer('*', function ($view) {
$view->with('sharedData', collect());
});
Event Listeners Listen to Micrus events (if supported):
event(new \Avris\Micrus\Events\RouteRegistered($route));
Route Model Binding Use implicit binding:
Micrus::get('/users/{user}', 'UserController@show');
Ensure User model implements RouteKeyName or getRouteKey().
Caching Cache routes in production:
php artisan route:cache
Lazy Loading Avoid eager loading in controllers; use lazy collections:
return User::where('active', true)->cursor(); // For large datasets
Queue Jobs Offload heavy tasks:
public function store(Request $request) {
ProcessUser::dispatch($request->all());
return response()->json(['message' => 'Processing...']);
}
How can I help you explore Laravel packages today?