2017-03-22 1 views
0

Je souhaite arrêter l'action du contrôleur lorsqu'un code de bloc est terminé.Comment arrêter l'exécution du code dans le contrôleur phalcon php

Ceci est un exemple de code.

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/')); 
      } 
     } 
    } 
} 

et un autre contrôleur qui s'étendent de la base est

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; 
      } 
     } 
    } 
} 

J'ai essayé d'utiliser exit; mais la vue ne rendre. Pouvez-vous l'expliquer?

Répondre

0

Pouvez-vous essayer send() -en réponse comme ceci?

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

Si cela ne fonctionne pas, vous pouvez avoir à utiliser beforeExecuteRoute dans votre « BaseController ».

class Controller extends \Phalcon\Mvc\Controller {  

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

Je pourrai les vérifier plus tard. J'espère que cela fonctionnera pour vous d'ici là.

+0

Merci Nikolay. J'ai essayé en premier mais je ne travaille pas. La deuxième façon est le travail parfaitement. J'ai été édité le deuxième code. veuillez voir la validation du filtre. si j'utilise le beforeExecuteRoute cela fonctionne pour vérifier la connexion mais pour is_allowed() et la validation je n'ai aucune idée. – Cecep

+0

J'essaie d'ajouter send() comme la première façon et je change 'return false' en 'exit;' et fonctionne parfaitement. Mais les effets secondaires idk de cette réflexion. Peut-être que tu peux m'expliquer quelque chose. : D – Cecep

+0

Il suffit de déplacer le contenu de 'isAllowed' vers votre méthode' beforeExecuteRoute' et de rendre vos redirections comme mon exemple (suivi de return false). –