2017-03-22 18 views
0

ブロックコードが完了したらコントローラの動作を停止します。コントローラの実行コードを停止する方法phalcon php

このコード例です。

class Controller extends \Phalcon\Mvc\Controller { 
    /** 
    * Check if user have access 
    * 
    */ 
    protected function isAllowed($perm = false) 
    { 
     /** 
     * Always allowed if $perm not defined 
     */ 
     if (!$perm) { 
      return false; 
     } 

     /** 
     * if user not login 
     */ 
     if (!$this->authentication->isLoggedin()) { 
      /* Redir to login */ 
      $this->response->redirect($this->url->get('authentication/login')); 
      return false; 

     } else { 
      /* Check for user access */ 
      if ($this->authorization->isAllowed($perm)) { 
       return true; 

      } else { 
       /* if not have access, it will be redir to index */ 
       $this->flash->warning("U not have permission to access page"); 
       return $this->response->redirect($this->url->get('administrator/')); 
      } 
     } 
    } 
} 

と基部から延びる別のコントローラが

class postController extends Controller { 
    /** 
    * Add group 
    * 
    */ 
    public function addAction() 
    { 
     /* 
      Check user access 
      this must redirect to login and stop exe script 
     */ 
     $this->isAllowed('group_add'); 

     /* 
      But when i check with `Postman` 
      without auth i redirect to login. 
      but when i use post method and fill the header body like bellow. 
      i still redir to login but this code execute. why? and how to stop it. 
     */ 
     /* If request is POST */ 
     if ($this->request->isPost()) { 
      /* Get all inputs from form */ 
      $inputs   = $this->request->getPost(); 
      $name   = $this->request->getPost('name', ['trim', 'striptags', 'string']); 
      $definition  = $this->request->getPost('definition', ['trim', 'striptags', 'string']); 

      /* Filter validation */ 
      if (!Validation::make($inputs, $this->rules())) { 
       $this->flash->error('...'); 
       ... redirect to page 
       return false; 
      } 

      /* Get from database */ 
      $model = new AauthGroups; 
      $group = $model->findFirst([ 
       'name = :name:', 
       'bind' => [ 
        'name' => $name 
       ] 
      ]); 

      /* If cant find group then add it */ 
      if (!$group) { 
       /* Set & save data */ 
       $model->name  = $name; 
       $model->definition = $definition; 
       $model->save(); 

       $this->flash->success('Yay!! We found that name in database, do u want to change it?'); 
       return; 
      } 

      /* If it finded than set flash error */ 
      else { 
       $this->flash->error('Oops!! We found that name in database, do u want to change it?'); 
       return; 
      } 
     } 
    } 
} 

あるIはexit;を使用しようとしたが、ビューが表示されません。あなたはそれを説明できますか?

答えて

0

send()-このような応答を試すことができますか?

/* Redir to login */ 
$this->response->redirect($this->url->get('authentication/login'))->send(); 
return false; 

これが機能しない場合、あなたはあなたの「BaseController」でbeforeExecuteRouteを使用する必要があります。

class Controller extends \Phalcon\Mvc\Controller {  

    public function beforeExecuteRoute() 
    { 
     // Check if logged 
     if (!$notLogged) { 
      $this->response->redirect('....')->send(); 
      return false; 
     } 
    } 

私は後で確認することができます。それまでにあなたのために働くことを願っています。

+0

ありがとうNikolay。私は最初の方法を試みたが、仕事はしなかった。 第二の方法は完全に仕事です。 私は2番目のコードを編集しました。フィルタの検証を参照してください。 私はbeforeExecuteRouteを使用するとcheck loginで動作しますが、is_allowed()と検証ではうまく動作しません。 – Cecep

+0

私はsend()を最初の方法のように追加しようとしています。私は 'return false'を'exit;'に変更して完全に動作します。しかし、これのidkの副作用は考える。多分私は何かを説明することができます。 :D – Cecep

+0

'isAllowed'の内容を' beforeExecuteRoute'メソッドに移動し、私の例のようなリダイレクトを行います(その後にfalseを返します)。 –

関連する問題