phalcon の ACL で少しエラーが発生しています。特定のコントローラー/アクションにアクセスするロールを持つユーザーを許可または拒否する関数 beforeExecuteRoute があります。
public function beforeExecuteRoute (Event $event, Dispatcher $dispatcher) {
$role = $this->session->get('role');
if (!$role) {
$role = self::GUEST;
}
//Get the current controller and action from the dispatcher
$controller = $dispatcher->getControllerName();
$action = $dispatcher->getActionName();
//Get the ACL rule list
$acl = $this->_getAcl();
//See if they have permission
$allowed = $acl->isAllowed($role, $controller, $action);
if ($allowed != Acl::ALLOW) {
$this->flash->error("You do not have permission to access this area.");
$this->response->redirect('site');
//Stops dispatcher at the current operation
return false;
}
}
私の ControllerBase には、スタイルと JavaScript のコレクションを設定する関数 initialize があります。
public function initialize()
{
Tag::prependTitle('Fireball |');
$this->assets
->collection('style')
->addCss('third-party/css/bootstrap.min.css', false, false)
->addCss('css/style.css')
->setTargetPath('css/production.css')
->setTargetUri('css/production.css')
->join(true)
->addFilter(new \Phalcon\Assets\Filters\Cssmin());
$this->assets
->collection('js')
->addJs('third-party/js/jqeury.min.js', false, false)
->addJs('third-party/js/bootstrap.min.js', false, false)
->setTargetPath('js/production.js')
->setTargetUri('js/production.js')
->join(true)
->addFilter(new \Phalcon\Assets\Filters\Jsmin());
}
そして、管理コントローラーで私はこの関数を呼び出しています
public function indexAction()
{
Tag::setTitle('Admin');
parent::initialize();
}
また、これらのスタイルと JavaScript のコレクションを出力するビューごとに、基本テンプレートを volt で作成しています。問題は、ユーザーがこの領域へのアクセスを許可されていない場合でもビューがレンダリングされ、「コレクションがマネージャーに存在しません」というエラーが発生することです。したがって、コレクションはコントローラーに設定されていませんが、ビューはそれをレンダリングしようとします。コレクションが存在するかどうかを確認する条件を設定しようとしましたが、コレクションにアクセスできるルートで期待どおりに機能せず、レンダリングされませんでした。私のbase.voltファイル:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{{ get_title() }}
{% if this.assets %}
{{ this.assets.outputCss('style')}}
{{ this.assets.outputJs('js')}}
{% endif %}
{% block head %}
{% endblock %}
</head>
<body>
<div class="navbar navbar-default">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Fireball</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="active">
<a href="#">Home</a>
</li>
<li>
<a href="#">About</a>
</li>
<li>
<a href="#">Contact</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li>
<a href="/signin">Sign in</a>
</li>
</ul>
</div>
</div>
</div>
{{ flash.output() }}
{% block content %}
{% endblock %}
</body>
</html>
そして、私の admin/index.volt (コレクションに関するエラーが発生している領域)
{% extends "templates/base.volt"%}
{% block head %}
{% endblock %}
{% block content %}
Admin/index
{% endblock %}
誰でもこの問題を解決するのを手伝ってもらえますか?