Leaf 5 โ Middleware Reference โ
Global Middleware (all routes) โ
php
// Closure โ Basic/Lite style
app()->use(function () {
echo request()->getMethod() . ' ' . request()->getPath();
});
// Class โ MVC style
use App\Middleware\LogRequestMiddleware;
app()->use(LogRequestMiddleware::class);
app()->use(AnotherMiddleware::class); // stack multipleRoute-Level Middleware โ
php
// Named (registered globally)
app()->registerMiddleware('auth', function () {
if (!auth()->user()) response()->redirect('/login');
});
app()->get('/home', ['middleware' => 'auth', function () { /* ... */ }]);
// Class
app()->get('/my-route', ['middleware' => LogRequestMiddleware::class, 'MyController@index']);
// Inline closure
$mw = function () { echo request()->getMethod(); };
app()->get('/home', ['middleware' => $mw, function () { echo 'Home'; }]);
app()->group('/admin', ['middleware' => $mw, function () {
app()->get('/', function () { echo 'dashboard'; });
}]);Use closures in Basic/Lite. Use classes in MVC.
MVC Middleware Class โ
Generate with: leaf g:middleware LogRequest
php
namespace App\Middleware;
use Leaf\Middleware;
class LogRequestMiddleware extends Middleware {
public function call() {
$method = request()->getMethod();
$uri = request()->getPath();
echo "[$method] $uri\n";
}
}Passing Data from Middleware โ Handler โ
Use response()->next() to pass data, request()->next() to read it. Data is consumed on first read and removed from the request lifecycle.
Closure version โ
php
app()->registerMiddleware('logRequest', function ($next) {
echo request()->getMethod();
return response()->next('You can pass any value here');
});
app()->get('/home', ['middleware' => 'logRequest', function () {
$data = request()->next(); // "You can pass any value here"
echo $data;
}]);MVC class version โ
php
class LogRequestMiddleware extends Middleware {
public function call($next) {
echo request()->getMethod();
return response()->next('You can pass any value');
}
}
class MyController extends Controller {
public function index() {
$data = request()->next(); // "You can pass any value"
echo $data;
}
}