1

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

誰でもこの問題を解決するのを手伝ってもらえますか?

4

1 に答える 1

1

これは Jesse Boyer の火の玉のチュートリアル コードですよね? 彼が仮想ボックスのカスタムルーティングを行ったように、ルーティングをリセットするか、URL を設定してみてください。

これを、依存関係のために public フォルダーの index.php に入れてみてください。

$di->set('url', function () use ($di) {
        $url = new \Phalcon\Mvc\Url();
        $dispatcher = $di->getShared('dispatcher');
        $url->setBaseUri('');
        return $url;
        });
于 2014-06-27T20:16:00.083 に答える