首页 > php框架 > Yii框架将后台模板整合到框架

Yii框架将后台模板整合到框架

将后台模板整合到框架中有两种方法,一种是两个入口文件,另一种可以把后台做为一个模块,下面我们一起来看这个例子,希望例子对各位会有所帮助。

一,两个入口文件方法:
项目目录结构(图):

前后台引导文件分别如下:

// index.php:
require('path/to/yii.php');
Yii::app()->createWebApplication('protected/config/main.php')->run();
// admin.php:
require('path/to/yii.php');
Yii::app()->createWebApplication('protected/admin/config/main.php')->run();

这样配置比较麻烦一些,我们可以采用覆盖的方法,参考了一个贴子的方法,我又做了一些修改.

protected/admin/config/main.php的代码如下:

<?php
$backend = dirname(dirname(__FILE__));
$frontend = dirname($backend);
Yii::setPathOfAlias('backend', $backend);
$frontendArray = require ($frontend . '/config/main.php');
$backendArray = array(
    'name' => '网站后台管理系统',
    'basePath' => $frontend,
    'controllerPath' => $backend . '/controllers',
    'viewPath' => $backend . '/views',
    'runtimePath' => $backend . '/runtime',
    // autoloading model and component classes
    'import' => array(
        'application.models.*',
        'application.components.*',
        'application.extensions.*',
        'application.extensions.nestedset.*',
        'backend.models.*',
        'backend.components.*', //这里的先后顺序一定要搞清
        
    ) ,
    'components' => array(
        'user' => array(
            // enable cookie-based authentication
            'allowAutoLogin' => true,
        ) ,
    ) ,
    // main is the default layout
    //'layout'=>'main',
    // alternate layoutPath
    'layoutPath' => dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'layouts' . DIRECTORY_SEPARATOR,
);
if (!function_exists('w3_array_union_recursive')) {
    /**
     * This function does similar work to $array1+$array2,
     * except that this union is applied recursively.
     * @param array $array1 - more important array
     * @param array $array2 - values of this array get overwritten
     * @return array
     */
    function w3_array_union_recursive($array1, $array2) {
        $retval = $array1 + $array2;
        foreach ($array1 as $key => $value) {
            if (is_array($array1[$key]) && is_array($array2[$key])) $retval[$key] = w3_array_union_recursive($array1[$key], $array2[$key]);
        }
        return $retval;
    }
}
return w3_array_union_recursive($backendArray, $frontendArray);

这里我们的model是公用的,controller和view是分开的,我们还可以通过命令行对后台进行model和crud,方法如下:

>yiic shell path/to/site/admin.php
>model Article
>crud Article

这样后台对应的controller和view就生成了!

如果只对后台的变量进行配置的话,只需要修改protected/admin下的配置文件就可以了!

大家如果有不明白的地方,欢迎讨论!

二,把后台做为一个模块方法:

第一步:用GII会成一个admin的模块;

第二步:打开(模块名+Module.php)的文件,我这里是oldweeklyadminModule.php文件进行编辑里面有一个OldweeklyadminModule的类继承于CWebModule首先我们调用init的方法:


public function init() {
    parent::init(); //这步是调用main.php里的配置文件
    //当Module创 www.phprm.com 建时这个方法就会被调用
    // 我们可以修改代码来定制Module
    // import the module-level models and components
    $this->setImport(array(
        'oldweeklyadmin.models.*',
        'oldweeklyadmin.components.*',
    ));
    //这里重写父类里的组件
    //如有需要还可以参考API添加相应组件
    Yii::app()->setComponents(array(
        'errorHandler' => array(
            'class' => 'CErrorHandler',
            'errorAction' => 'oldweeklyadmin/default/error',
        ) ,
        'user' => array(
            'class' => 'CWebUser',
            'stateKeyPrefix' => 'oldweeklyadmin',
            'loginUrl' => Yii::app()->createUrl('http://pic1.phprm.com/2014/04/13/login.jpg') ,
        ) ,
    ) , false);
    $this->generatorPaths[] = 'oldweeklyadmin.generators';
    $this->controllerMap = $this->findGenerators();
}


如果进入module的时候要进行密码验证并且和前台登录分开

就要进行设置对执行的动作进行识别


public function beforeControllerAction($controller, $action) {
    if (parent::beforeControllerAction($controller, $action)) {
        $route = $controller->id . '/' . $action->id;
        if (!$this->allowIp(Yii::app()->request->userHostAddress) && $route !== 'default/error') throw new CHttpException(403, "You are not allowed to access this page.");
        $publicPages = array(
            'default/login',
            'default/error',
        );
        if (Yii::app()->user->isGuest && !in_array($route, $publicPages)) Yii::app()->user->loginRequired();
        else return true;
    }
    return false;
}
protected function allowIp($ip) {
    if (empty($this->ipFilters)) return true;
    foreach ($this->ipFilters as $filter) {
        if ($filter === '*' || $filter === $ip || (($pos = strpos($filter, '*')) !== false && !strncmp($ip, $filter, $pos))) return true;
    }
    return false;
}

设置资源文件路径

<?php
public function getAssetsUrl() {
    if ($this->_assetsUrl === null) $this->_assetsUrl = Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('oldweeklyadmin.assets'));
    return $this->_assetsUrl;
}
public function setAssetsUrl($value) {
    $this->_assetsUrl = $value;
}


本文地址:http://www.phprm.com/frame/60220.html

转载随意,但请附上文章地址:-)

标签:foreach request

相关文章

发表留言