Laravel - назначить Middleware для конкретного метода с конкретным методом запроса в контроллере - PullRequest
0 голосов
/ 26 сентября 2018

Я использую Laravel 5.6.

Мне нужно назначить ДВА РАЗНОГО промежуточного программного обеспечения в контроллере тем же методом, но другим методом ЗАПРОСА (post и put).

Я знаю, что его можно назначитьв route/web.php.

Но мне просто интересно, есть ли способ решить эту проблему в ONLY CONTROLLER?

Это код ниже

namespace App\Http\Controllers\Users;

use Illuminate\Http\Request;
use App\Http\Controllers\Admin\Auth\AuthPagesController;

class Users extends AuthPagesController
{
    //
    public function __construct()
    {
        //this middleware should be for POST request
        $this->middleware('permission:User -> Add Item')->only('save'); 

        //this middleware should be for PUT request
        $this->middleware('permission:User -> Update Item')->only('save'); 
    }

    public function save(Request $req, $id=null){

        if ($req->isMethod('post')){

             //only check for middleware 'permission:User -> Add Item'
             //then run the 'Add Item' code

        }elseif($req->isMethod('put')){

             //only check for middleware 'permission:User -> Update Item'
             //then run the 'Update Item' code

        }

    }
}

Но кодвыше создаст проблему для меня, потому что он будет проверять ОБА СРЕДНЕГО ОБЕСПЕЧЕНИЯ.

1 Ответ

0 голосов
/ 26 сентября 2018

Ха-ха.Я только что решил свою собственную проблему.

На самом деле это очень просто.Просто сделайте так в методе __construct.

public function __construct(Request $req)
{
    //this middleware should be for POST request only
    if($req->isMethod('post')){
        $this->middleware('permission:User -> Add Item')->only('save'); 
    }

    //this middleware should be for PUT request only
    if($req->isMethod('put')){
        $this->middleware('permission:User -> Update Item')->only('save'); 
    }
}

public function save(Request $req, $id=null){

    // for security purpose, allow only 'post' and 'put' request
    if(!$req->isMethod('post') && !$req->isMethod('put')) return false;

    if ($req->isMethod('post')){

         //only check for middleware 'permission:User -> Add Item'
         //then run the 'Add Item' code

    }elseif($req->isMethod('put')){

         //only check for middleware 'permission:User -> Update Item'
         //then run the 'Update Item' code

    }

}

Я надеюсь, что этот ответ будет полезен для других.: D

...