使用基本应用程序模板将主题集成到Yii 2时出错


Error while integrating theme into Yii 2 with basic application template

我正在尝试在Yii2中集成一个主题。我把主题放在基本文件夹的主题文件夹里。在config/web.php文件中,我在组件数组下插入了以下代码:

  <?php
$params = require(__DIR__ . '/params.php');
$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'components' => [
        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => 'bnfhxfasdf7324675@$%fg',
        ],
        'cache' => [
            'class' => 'yii'caching'FileCache',
        ],
        'user' => [
            'identityClass' => 'app'models'User',
            'enableAutoLogin' => true,
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
        'mailer' => [
            'class' => 'yii'swiftmailer'Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport' => true,
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii'log'FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'db' => require(__DIR__ . '/db.php'),
        'view' => [
            'theme' => [
                'basePath' => '@app/themes/flat',
                'baseUrl' => '@web/themes/flat',
                'pathMap' => [
                    '@app/views' => '@app/themes/flat/views',
                ],
            ],
        ],
    ],
    'params' => $params,
];
if (YII_ENV_DEV) {
    // configuration adjustments for 'dev' environment
    $config['bootstrap'][] = 'debug';
    $config['modules']['debug'] = [
        'class' => 'yii'debug'Module',
    ];
    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = [
        'class' => 'yii'gii'Module',
    ];
}
return $config;

但是我得到了错误

Unknown Property – yii'base'UnknownPropertyException
Getting unknown property: yii'web'Application::theme

foreach ($this->_behaviors as $behavior) {
                if ($behavior->canGetProperty($name)) {
                    return $behavior->$name;
                }
            }
        }
        if (method_exists($this, 'set' . $name)) {
            throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
        } else {
            throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
        }
    }

下面是app.log文件中的堆栈跟踪。

2015-08-14 04:22:20 [127.0.0.1][-][-][error][yii'base'UnknownPropertyException] exception 'yii'base'UnknownPropertyException' with message 'Getting unknown property: yii'web'Application::theme' in D:'wamp'www'yii2crm'basic'vendor'yiisoft'yii2'base'Component.php:143
Stack trace:
#0 D:'wamp'www'yii2crm'basic'vendor'yiisoft'yii2'di'ServiceLocator.php(73): yii'base'Component->__get('theme')
#1 D:'wamp'www'yii2crm'basic'themes'flat'views'layouts'main.php(14): yii'di'ServiceLocator->__get('theme')
#2 D:'wamp'www'yii2crm'basic'vendor'yiisoft'yii2'base'View.php(325): require('D:'wamp'www'yii...')
#3 D:'wamp'www'yii2crm'basic'vendor'yiisoft'yii2'base'View.php(247): yii'base'View->renderPhpFile('D:'wamp'www'yii...', Array)
#4 D:'wamp'www'yii2crm'basic'vendor'yiisoft'yii2'base'Controller.php(386): yii'base'View->renderFile('D:'wamp'www'yii...', Array, Object(app'controllers'SiteController))
#5 D:'wamp'www'yii2crm'basic'vendor'yiisoft'yii2'base'Controller.php(372): yii'base'Controller->renderContent('<div class="sit...')
#6 D:'wamp'www'yii2crm'basic'controllers'SiteController.php(52): yii'base'Controller->render('index')
#7 [internal function]: app'controllers'SiteController->actionIndex()
#8 D:'wamp'www'yii2crm'basic'vendor'yiisoft'yii2'base'InlineAction.php(55): call_user_func_array(Array, Array)
#9 D:'wamp'www'yii2crm'basic'vendor'yiisoft'yii2'base'Controller.php(151): yii'base'InlineAction->runWithParams(Array)
#10 D:'wamp'www'yii2crm'basic'vendor'yiisoft'yii2'base'Module.php(455): yii'base'Controller->runAction('', Array)
#11 D:'wamp'www'yii2crm'basic'vendor'yiisoft'yii2'web'Application.php(84): yii'base'Module->runAction('', Array)
#12 D:'wamp'www'yii2crm'basic'vendor'yiisoft'yii2'base'Application.php(375): yii'web'Application->handleRequest(Object(yii'web'Request))
#13 D:'wamp'www'yii2crm'basic'web'index.php(12): yii'base'Application->run()
#14 {main}
2015-08-14 04:22:20 [127.0.0.1][-][-][info][application] $_COOKIE = [
    '__utma' => '111872281.2069871515.1389088762.1438681554.1439275464.68'
    '__utmz' => '111872281.1389088762.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)'
    'gpv_p23' => 'no value'
    's_nr' => '1392380191996-Repeat'
    'PHPSESSID' => 'pl7hrmbd2u5umjekfkc0ti0hq7'
]
$_SERVER = [
    'HTTP_HOST' => 'localhost'
    'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0'
    'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
    'HTTP_ACCEPT_LANGUAGE' => 'en-US,en;q=0.5'
    'HTTP_ACCEPT_ENCODING' => 'gzip, deflate'
    'HTTP_COOKIE' => '__utma=111872281.2069871515.1389088762.1438681554.1439275464.68; __utmz=111872281.1389088762.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); gpv_p23=no%20value; s_nr=1392380191996-Repeat; PHPSESSID=pl7hrmbd2u5umjekfkc0ti0hq7'
    'HTTP_CONNECTION' => 'keep-alive'
    'HTTP_CACHE_CONTROL' => 'max-age=0'
    'PATH' => 'C:''Windows''system32;C:''Windows;C:''Windows''System32''Wbem;C:''Windows''System32''WindowsPowerShell''v1.0'';C:''Program Files (x86)''Microsoft SQL Server''100''Tools''Binn'';C:''Program Files (x86)''Microsoft SQL Server''100''DTS''Binn'';C:''Program Files (x86)''Microsoft SQL Server''100''Tools''Binn''VSShell''Common7''IDE'';C:''Program Files''TortoiseSVN''bin;D:''wamp''bin''php''php5.4.12'';D:''wamp''www''yii''framework;D:''wamp''apps''PostgreSQL''9.3''bin;C:''Program Files (x86)''EasyFrom Trial'';C:''Program Files''nodejs'';C:''ProgramData''ComposerSetup''bin;'
    'SystemRoot' => 'C:''Windows'
    'COMSPEC' => 'C:''Windows''system32''cmd.exe'
    'PATHEXT' => '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC'
    'WINDIR' => 'C:''Windows'
    'SERVER_SIGNATURE' => ''
    'SERVER_SOFTWARE' => 'Apache/2.4.4 (Win64) PHP/5.4.12'
    'SERVER_NAME' => 'localhost'
    'SERVER_ADDR' => '127.0.0.1'
    'SERVER_PORT' => '80'
    'REMOTE_ADDR' => '127.0.0.1'
    'DOCUMENT_ROOT' => 'D:/wamp/www'
    'REQUEST_SCHEME' => 'http'
    'CONTEXT_PREFIX' => ''
    'CONTEXT_DOCUMENT_ROOT' => 'D:/wamp/www'
    'SERVER_ADMIN' => 'admin@example.com'
    'SCRIPT_FILENAME' => 'D:/wamp/www/yii2crm/basic/web/index.php'
    'REMOTE_PORT' => '1554'
    'GATEWAY_INTERFACE' => 'CGI/1.1'
    'SERVER_PROTOCOL' => 'HTTP/1.1'
    'REQUEST_METHOD' => 'GET'
    'QUERY_STRING' => ''
    'REQUEST_URI' => '/yii2crm/basic/web/'
    'SCRIPT_NAME' => '/yii2crm/basic/web/index.php'
    'PHP_SELF' => '/yii2crm/basic/web/index.php'
    'REQUEST_TIME_FLOAT' => 1439526140.731
    'REQUEST_TIME' => 1439526140
]
2015-08-14 04:22:20 [127.0.0.1][-][-][warning][yii'log'Dispatcher::dispatch] Unable to send log via yii'debug'LogTarget: Exception 'Exception' with message 'Serialization of 'Closure' is not allowed' 
in D:'wamp'www'yii2crm'basic'vendor'yiisoft'yii2-debug'LogTarget.php:58
Stack trace:
#0 D:'wamp'www'yii2crm'basic'vendor'yiisoft'yii2-debug'LogTarget.php(58): serialize(Array)
#1 D:'wamp'www'yii2crm'basic'vendor'yiisoft'yii2-debug'LogTarget.php(112): yii'debug'LogTarget->export(Array)
#2 D:'wamp'www'yii2crm'basic'vendor'yiisoft'yii2'log'Dispatcher.php(183): yii'debug'LogTarget->collect(Array, true)
#3 D:'wamp'www'yii2crm'basic'vendor'yiisoft'yii2'log'Logger.php(173): yii'log'Dispatcher->dispatch(Array, true)
#4 D:'wamp'www'yii2crm'basic'vendor'yiisoft'yii2'base'ErrorHandler.php(111): yii'log'Logger->flush(true)
#5 [internal function]: yii'base'ErrorHandler->handleException(Object(yii'base'UnknownPropertyException))
#6 {main}
2015-08-14 04:22:20 [127.0.0.1][-][-][info][application] $_COOKIE = [
    '__utma' => '111872281.2069871515.1389088762.1438681554.1439275464.68'
    '__utmz' => '111872281.1389088762.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)'
    'gpv_p23' => 'no value'
    's_nr' => '1392380191996-Repeat'
    'PHPSESSID' => 'pl7hrmbd2u5umjekfkc0ti0hq7'
]
$_SERVER = [
    'HTTP_HOST' => 'localhost'
    'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0'
    'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
    'HTTP_ACCEPT_LANGUAGE' => 'en-US,en;q=0.5'
    'HTTP_ACCEPT_ENCODING' => 'gzip, deflate'
    'HTTP_COOKIE' => '__utma=111872281.2069871515.1389088762.1438681554.1439275464.68; __utmz=111872281.1389088762.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); gpv_p23=no%20value; s_nr=1392380191996-Repeat; PHPSESSID=pl7hrmbd2u5umjekfkc0ti0hq7'
    'HTTP_CONNECTION' => 'keep-alive'
    'HTTP_CACHE_CONTROL' => 'max-age=0'
    'PATH' => 'C:''Windows''system32;C:''Windows;C:''Windows''System32''Wbem;C:''Windows''System32''WindowsPowerShell''v1.0'';C:''Program Files (x86)''Microsoft SQL Server''100''Tools''Binn'';C:''Program Files (x86)''Microsoft SQL Server''100''DTS''Binn'';C:''Program Files (x86)''Microsoft SQL Server''100''Tools''Binn''VSShell''Common7''IDE'';C:''Program Files''TortoiseSVN''bin;D:''wamp''bin''php''php5.4.12'';D:''wamp''www''yii''framework;D:''wamp''apps''PostgreSQL''9.3''bin;C:''Program Files (x86)''EasyFrom Trial'';C:''Program Files''nodejs'';C:''ProgramData''ComposerSetup''bin;'
    'SystemRoot' => 'C:''Windows'
    'COMSPEC' => 'C:''Windows''system32''cmd.exe'
    'PATHEXT' => '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC'
    'WINDIR' => 'C:''Windows'
    'SERVER_SIGNATURE' => ''
    'SERVER_SOFTWARE' => 'Apache/2.4.4 (Win64) PHP/5.4.12'
    'SERVER_NAME' => 'localhost'
    'SERVER_ADDR' => '127.0.0.1'
    'SERVER_PORT' => '80'
    'REMOTE_ADDR' => '127.0.0.1'
    'DOCUMENT_ROOT' => 'D:/wamp/www'
    'REQUEST_SCHEME' => 'http'
    'CONTEXT_PREFIX' => ''
    'CONTEXT_DOCUMENT_ROOT' => 'D:/wamp/www'
    'SERVER_ADMIN' => 'admin@example.com'
    'SCRIPT_FILENAME' => 'D:/wamp/www/yii2crm/basic/web/index.php'
    'REMOTE_PORT' => '1554'
    'GATEWAY_INTERFACE' => 'CGI/1.1'
    'SERVER_PROTOCOL' => 'HTTP/1.1'
    'REQUEST_METHOD' => 'GET'
    'QUERY_STRING' => ''
    'REQUEST_URI' => '/yii2crm/basic/web/'
    'SCRIPT_NAME' => '/yii2crm/basic/web/index.php'
    'PHP_SELF' => '/yii2crm/basic/web/index.php'
    'REQUEST_TIME_FLOAT' => 1439526140.731
    'REQUEST_TIME' => 1439526140
]

请帮。

试着用:

'view' => [
         'theme' => [
             'pathMap' => [
                '@app/views' => '@app/themes/flat'
                ],
            ],
        ],

可能您使用的主题是yii1样式的Yii::app()->theme,但在yii2中,您可以通过[[yii'base'View::theme]]属性访问[[yii'base'Theme]]对象。