SESSION 02
Muhammad Rizwan Arshad
Principal Software Engineer, Nextbridge.
July 28, 2015
app/Http/Middleware
# php artisan make:middleware OldMiddleware
namespace App\Http\Middleware; use Closure; class OldMiddleware { public function handle($request, Closure $next) { if ($request->input('age') <= 200) { return redirect('home'); } return $next($request); } }
namespace App\Http\Middleware;
use Closure;
class BeforeMiddleware
{
public function handle($request, Closure $next)
{
return $next($request);
}
}
namespace App\Http\Middleware;
use Closure;
class AfterMiddleware
{
public function handle($request, Closure $next)
{
$response = $next($request);
return $response;
}
}
For every HTTP request to your application Simply list the middleware class in the $middleware property of your app/Http/Kernel.php class.
// Within App\Http\Kernel Class...
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
];
Route::get('admin/profile', ['middleware' => 'auth', function () {
//
}]);
class RoleMiddleware { public function handle($request, Closure $next, $role) { if (! $request->user()->hasRole($role)) { // Redirect... } return $next($request); } } Route::put('post/{id}', ['middleware' => 'role:editor', function ($id) {
//
}]);
handling logic in a single routes.php
class UserController extends Controller
{
public function showProfile($id)
{
return view('user.profile', ['user' => User::findOrFail($id)]);
}
}
Route::get('user/{id}', 'UserController@showProfile');
If your full controller class is App\Http\Controllers\Photos\AdminController, you would register a route like so:
Route::get('foo', 'Photos\AdminController@method');
Route::get('foo', ['uses' => 'FooController@method', 'as' => 'name']);
$url = action('FooController@method');
$url = route('name');
Route::get('profile', [ 'middleware' => 'auth', 'uses' => 'UserController@showProfile' ]); class UserController extends Controller
{
public function __construct()
{
$this->middleware('auth');
$this->middleware('log', ['only' => ['fooAction', 'barAction']]);
$this->middleware('subscribed', ['except' => ['fooAction', 'barAction']]);
}
}
# php artisan make:controller PhotoController
Above command will create: app/Http/Controllers/PhotoController.php
Register a resourceful route:
Route::resource('photo', 'PhotoController');
Verb Path Action Route
GET | /photo | index | photo.index |
GET | /photo/create | create | photo.create |
POST | /photo | store | photo.store |
GET | /photo/{photo} | show | photo.show |
GET | /photo/{photo}/edit | edit | photo.edit |
PUT/PATCH | /photo/{photo} | update | photo.update |
DELETE | /photo/{photo} | destroy |
photo.destroy |
Route::resource('photo', 'PhotoController',
['only' => ['index', 'show']]);
Route::resource('photo', 'PhotoController',
['except' => ['create', 'store', 'update', 'destroy']]);
Route::resource('photo', 'PhotoController',
['names' => ['create' => 'photo.build']]);
Route::resource('photos.comments', 'PhotoCommentController');
URL: photos/{photos}/comments/{comments}
class PhotoCommentController extends Controller
{
public function show($photoId, $commentId)
{
//
}
}
you should define related routes before your call to Route::resource;
Route::get('photos/popular', 'PhotoController@method');
Route::resource('photos', 'PhotoController');
Route::controller('users', 'UserController');
class UserController extends Controller
{
public function getIndex()
{}
public function getShow($id)
{}
public function getAdminProfile()
{}
public function postProfile()
{}
}
If you would like to name some of the routes on the controller, you may pass an array of names as the third argument to the controller method:
Route::controller('users', 'UserController', [
'getShow' => 'user.show',
]);