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?
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
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
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). –