Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel adding middleware inside a controller function

Tags:

php

laravel

as the title says I want to use a middleware inside a controller function. I have resource controllers, which their functions inside will have different access rights so I can't use a middleware in the web.php file, I have to use or apply it separately in each function to limit access, my googling hasn't been successful in getting a solution to that so far. Any help please and thanks in advance.

P.S. I believe no code is necessary here.

like image 242
lulliezy Avatar asked May 05 '17 12:05

lulliezy


People also ask

Can we apply middleware in controller Laravel?

Laravel incorporates a middleware that confirms whether or not the client of the application is verified. If the client is confirmed, it diverts to the home page otherwise, it diverts to the login page. All controllers in Laravel are created in the Controllers folder, located in App/Http/Controllers.

How do I add middleware to my controller?

php routes file, you can add a middleware to it as shown (picked this example from the DOC.) Route::get('admin/profile', function () { // })->middleware('auth'); To place multiple routes under the same middleware, you can use Route groups. Please remove the middleware from the controller constructor.

Can we use middleware in controller?

We can also assign the middleware to the controller's routes within your route files. There are various ways of assigning the middleware to the controller: Assigning the middleware to the controller in the web. php file.


2 Answers

There are 3 ways to use a middleware inside a controller:

1) Protect all functions:

public function __construct()
{
    $this->middleware('auth');
}

2) Protect only some functions:

public function __construct()
{
    $this->middleware('auth')->only(['functionName1', 'functionName2']);
}

3) Protect all functions except some:

public function __construct()
{
    $this->middleware('auth')->except(['functionName1', 'functionName2']);
}

Here you can find all the documentation about this topic: Controllers

I hope this can be helpful, regards!

like image 143
Radames E. Hernandez Avatar answered Oct 10 '22 16:10

Radames E. Hernandez


Middleware could also be applied to just one function, just add the method name in your controller constructor

public function __construct()
{
    // Middleware only applied to these methods
    $this->middleware('loggedIn', [
        'only' => [
            'update' // Could add bunch of more methods too
        ]
    ]);
}

OR

public function __construct()
{
    // Middleware only applied to these methods
    $this->middleware('loggedIn')->only([
        'update' // Could add bunch of more methods too
    ]);
}

Here's the documentation

like image 28
linktoahref Avatar answered Oct 10 '22 14:10

linktoahref