2016-10-13 14 views
0

私はCakePHP 3をかなり新しくしています。基本的に私はUsersControllerを持っています。このコントローラーには基本的なRESTfulメソッドがいくつかあり、それぞれが有効な要求メソッドを調べてから処理を進めます。例えばCakePHP 3 - いくつかのエンドポイントで一般的な条件のためのミドルウェアを追加します。

class UsersController extends AppController 
{ 

    public function create() 
    { 
     if ($this->request->is('post') === false) { 
      throw new BadRequestException('This API endpoint only accepts a POST request'); 
      return false; 
     } 

     if (empty($this->request->data) || !count($this->request->data)) { 
      throw new BadRequestException('No POST data received'); 
      return false; 
     } 
    } 

    public function update() 
    { 
     if ($this->request->is('post') === false) { 
      throw new BadRequestException('This API endpoint only accepts a POST request'); 
      return false; 
     } 

     if (empty($this->request->data) || !count($this->request->data)) { 
      throw new BadRequestException('No POST data received'); 
      return false; 
     } 
    } 

    public function delete() 
    { 
     if ($this->request->is('post') === false) { 
      throw new BadRequestException('This API endpoint only accepts a POST request'); 
      return false; 
     } 

     if (empty($this->request->data) || !count($this->request->data)) { 
      throw new BadRequestException('No POST data received'); 
      return false; 
     } 
    } 
} 

これはかなり繰り返し見て、私はメソッドのみのため、すべての要求の検証を行うミドルウェアを構築することができると思います(私はインデックスを()がある場合、すなわち、ミドルウェアは適用されません);しかし、私はこれをどうやって行うことができないのか分かりません。

ご協力いただければ幸いです。

答えて

1

あなたは

のようにまた、あなたが ます$ this->要求 - >のparamsを使用して、賢明な方法で[「行動」]を指定することができる一般的なエラー

public function initialize(){ 
    parent::initialize(); 

    if (!$this->request->is('post')) { 
     throw new BadRequestException('This API endpoint only accepts a POST request'); 
     return false; 
    } 

    if (empty($this->request->data) || !count($this->request->data)) { 
     throw new BadRequestException('No POST data received'); 
     return false; 
    } 

} 

を行うためのコントローラの初期化機能を使用することができます

if (!$this->request->is('post') && in_array($this->request->params['action'], ['index','add','delete'])) { 
     throw new BadRequestException('This API endpoint only accepts a POST request'); 
     return false; 
    } 

希望すると助かります

関連する問題