Проблема с “кастомным” UrlRule.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Oleg-san
Сообщения: 40
Зарегистрирован: 2013.06.05, 22:23

Проблема с “кастомным” UrlRule.

Сообщение Oleg-san »

У проекта следующая структура:

Код: Выделить всё

Project
 |- assets
 |- extensions
 |  |-yii (расширения для framework: bootstrap, debug, gii и т.д.)
 |- framework
 |  |-yii (сам framework)
 |- protected
 |  |- config
 |  |  |- config.php
 |  |- modules
 |  |  |- admin
 |  |  |  |- components
 |  |  |     |- CcUrlRule.php
 |  |  |- Admin.php
 |  |- runtime
 |- runtime
 |- index.php
В config.php в секции components для urlManager указываю свой собственный кастомный CcUrlRule (который находиться в папке protected - module - components - CcUrlRule.php).

Код: Выделить всё

<?php
/**
 * User: Khaletskiy Oleg
 * Date: 22.12.13
 * Time: 17:23
 * File name: web.php
 */

$config = [
    'id' => 'CcEngine',
    'basePath' => dirname(__DIR__),
    'extensions' => [
        'extensions/yii/bootstrap' => [
            'name' => 'extensions/yii/bootstrap',
            'version' => '2.0.0.0-alpha',
            'alias' =>
            [
                '@yii/bootstrap' => dirname(__DIR__) . '/../extensions/yii/bootstrap',
            ],
        ],
        'extensions/yii/gii' => [
            'name' => 'extensions/yii/gii',
            'version' => '2.0.0.0-alpha',
            'alias' =>
            [
                '@yii/gii' => dirname(__DIR__) . '/../extensions/yii/gii',
            ],
        ],
        'extensions/yii/debug' => [
            'name' => 'extensions/yii/debug',
            'version' => '2.0.0.0-alpha',
            'alias' =>
            [
                '@yii/debug' => dirname(__DIR__) . '/../extensions/yii/debug',
            ],
        ],
        'extensions/yii/swiftmailer' => [
            'name' => 'extensions/yii/swiftmailer',
            'version' => '2.0.0.0-alpha',
            'alias' =>
            [
                '@yii/swiftmailer' => dirname(__DIR__) . '/../extensions/yii/swiftmailer',
            ],
        ],
    ],
    'components' => [
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'user' => [
            'identityClass' => 'app\models\User',
        ],
        'mail' => [
            'class' => 'yii\swiftmailer\Mailer',
        ],
        'log' => [
            'traceLevel' => YII_DEBUG?3:0,
            'targets' => [
                'class' => 'yii\log\FileTarget',
//                'levels' => ['error', 'warning'],
            ],
        ],
        'urlManager' => [
            'rules' => [
                '/' => [
                    'class' => 'app/modules/admin/components/CcUrlRule'
                ],
            ],
        ],
    ],
    'modules' => [
        'admin' => [
            'class' => 'app/modules/admin/Admin'
        ]
    ],
];

if(YII_ENV_DEV)
{
    $config['preload'][] = 'debug';
    $config['modules']['debug'] = 'yii\debug\Module';
    $config['modules']['gii'] = 'yii\gii\Module';
}
return $config;
Сам CcUrlRule:

Код: Выделить всё

use yii\web\UrlRule;

class CcUrlRule extends UrlRule
{
    public function init()
    {
        echo '1';
        exit;
    }

    public function createUrl($manager, $route, $params)
    {
        echo '2';
        exit;
    }

    public function parseRequest($manager, $request)
    {
        echo '3';
        exit;
    }
} 
Насколько я понял, при обращении к сайту, по какому либо url всегда будет запускаться мой “кастомный” url. В котором уже будет обрабатываться запрос, и выдаваться нужная информация.
Проблема в том что при обращение к сайту мой класс ни каким образом не запускается.
Что я делаю не правильно?
Последний раз редактировалось Oleg-san 2013.12.31, 23:27, всего редактировалось 1 раз.
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Проблема с “кастомным” UrlRule.

Сообщение vova07 »

Не уверен на 100% но вроде нельзя подключать класс так как вы это сделали.
В доках есть пример.
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Проблема с “кастомным” UrlRule.

Сообщение maleks »

1.

Код: Выделить всё

'class' => 'app/modules/admin/components/CcUrlRule' 
слешеки нужно другие, смотрите как в других компонентах у вас.

2. Для CcUrlRule не вижу его namespace

3. каталог то - protected/module или protected/modules ?
Oleg-san
Сообщения: 40
Зарегистрирован: 2013.06.05, 22:23

Re: Проблема с “кастомным” UrlRule.

Сообщение Oleg-san »

vova07 писал(а):Не уверен на 100% но вроде нельзя подключать класс так как вы это сделали.
В доках есть пример.
пробовал и так подключать

Код: Выделить всё

'urlManager' => [                                                
    'rules' => [                                                 
        'class' => 'app\modules\admin\components\CcUrlRule'
    ],                                                           
],
все равно не пашет....
maleks писал(а):1.

Код: Выделить всё

'class' => 'app/modules/admin/components/CcUrlRule' 
слешеки нужно другие, смотрите как в других компонентах у вас.

2. Для CcUrlRule не вижу его namespace

3. каталог то - protected/module или protected/modules ?
1) менял слешки, не помогает.
2) добавил для CcUrlRule namespace.
3) protected/modules, на схемв букву пропустил...
То есть теперь у меня config.php выглядит следующим образом:

Код: Выделить всё

<?php
$config = [
    'id' => 'CcEngine',
    'basePath' => dirname(__DIR__),
    'extensions' => [
        'extensions/yii/bootstrap' => [
            'name' => 'extensions/yii/bootstrap',
            'version' => '2.0.0.0-alpha',
            'alias' =>
            [
                '@yii/bootstrap' => dirname(__DIR__) . '/../extensions/yii/bootstrap',
            ],
        ],
        'extensions/yii/gii' => [
            'name' => 'extensions/yii/gii',
            'version' => '2.0.0.0-alpha',
            'alias' =>
            [
                '@yii/gii' => dirname(__DIR__) . '/../extensions/yii/gii',
            ],
        ],
        'extensions/yii/debug' => [
            'name' => 'extensions/yii/debug',
            'version' => '2.0.0.0-alpha',
            'alias' =>
            [
                '@yii/debug' => dirname(__DIR__) . '/../extensions/yii/debug',
            ],
        ],
        'extensions/yii/swiftmailer' => [
            'name' => 'extensions/yii/swiftmailer',
            'version' => '2.0.0.0-alpha',
            'alias' =>
            [
                '@yii/swiftmailer' => dirname(__DIR__) . '/../extensions/yii/swiftmailer',
            ],
        ],
    ],
    'components' => [
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'user' => [
            'identityClass' => 'app\models\User',
        ],
        'mail' => [
            'class' => 'yii\swiftmailer\Mailer',
        ],
        'log' => [
            'traceLevel' => YII_DEBUG?3:0,
            'targets' => [
                'class' => 'yii\log\FileTarget',
//                'levels' => ['error', 'warning'],
            ],
        ],
        'urlManager' => [
            'rules' => [
                'class' => 'app\modules\admin\components\CcUrlRule'
            ],
        ],
    ],
    'modules' => [
        'admin' => [
            'class' => 'app\modules\admin\Admin'
        ]
    ],
];

if(YII_ENV_DEV)
{
    $config['preload'][] = 'debug';
    $config['modules']['debug'] = 'yii\debug\Module';
    $config['modules']['gii'] = 'yii\gii\Module';
}
return $config;
ну а CcUrlRule.php так:

Код: Выделить всё

namespace app\components;

use yii\web\UrlRule;

class CcUrlRule extends UrlRule
{
    public function init()
    {
        echo '1';
        exit;
    }

    public function createUrl($manager, $route, $params)
    {
        echo '2';
        exit;
    }

    public function parseRequest($manager, $request)
    {
        echo '3';
        exit;
    }
}
Так же в конфиге пробыавл указывать вместо app protected ('class' => 'app\modules\admin\components\CcUrlRule' - 'class' => 'protected\modules\admin\components\CcUrlRule'), не помогло.
Oleg-san
Сообщения: 40
Зарегистрирован: 2013.06.05, 22:23

Re: Проблема с “кастомным” UrlRule.

Сообщение Oleg-san »

Все, сам нашел свою ошибку и сам исправил %)
1) Переименовал папку protected в app, так как protected зарезервированное в php слово и его не удастся использовать в namespace.
2) Изменил немного конфиг.
Было:

Код: Выделить всё

'urlManager' => [                                                
    'rules' => [                                                 
        'class' => 'app\modules\admin\components\CcUrlRule'
    ],                                                           
],
Стало

Код: Выделить всё

'urlManager' => [                                      
    'class' => 'app\modules\admin\components\CcUrlRule'
],
И соответственно CcUrlRule выглядит следующим образом:

Код: Выделить всё

namespace app\modules\admin\components;

use yii\web\UrlRule;

class CcUrlRule extends UrlRule
{
    public function init()
    {
        echo '1';
        exit;
    }

    public function createUrl($manager, $route, $params)
    {
        echo '2';
        exit;
    }

    public function parseRequest($manager, $request)
    {
        echo '3';
        exit;
    }
}
Вроде заработало...
Ответить