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;
を使用しようとしたが、ビューが表示されません。あなたはそれを説明できますか?
ありがとうNikolay。私は最初の方法を試みたが、仕事はしなかった。 第二の方法は完全に仕事です。 私は2番目のコードを編集しました。フィルタの検証を参照してください。 私はbeforeExecuteRouteを使用するとcheck loginで動作しますが、is_allowed()と検証ではうまく動作しません。 – Cecep
私はsend()を最初の方法のように追加しようとしています。私は 'return false'を'exit;'に変更して完全に動作します。しかし、これのidkの副作用は考える。多分私は何かを説明することができます。 :D – Cecep
'isAllowed'の内容を' beforeExecuteRoute'メソッドに移動し、私の例のようなリダイレクトを行います(その後にfalseを返します)。 –