╃巡洋艦㊣ 2011-03-09 21:56:44 16797次浏览 46条回复 2 0 0

此方法参考官方网站的cookbook,详细请看Organize directories for applications with front-end and back-end, 我在此基础上做了一些改动,人个感觉非常棒了,大家可以试一下!

首先我把目录结构写下来:

www root/
    index.php
    admin.php
    assets/
    images/
    protected/
        config/
            main.php
        components/
        controllers/
        models/
        views/
        runtime/
        admin/
            config/
                main.php
            components/
            controllers/
            views/
            runtime/

前后台引导文件分别如下
// 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();

cookbook上的方法是前后台各有一个配置文件,这样配置比较麻烦一些,我们可以采用覆盖的方法,这是参考一个回复者的方法,我又做了一些修改.

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下的配置文件就可以了! 大家如果有不明白的地方,欢迎讨论!

  • 回复于 2014-03-12 16:06 举报

    方便,简单,实用

  • 回复于 2014-02-12 17:17 举报

    前台一登陆后台就自动退出了 这个怎么回事呢!

  • 回复于 2013-07-09 16:04 举报

    例子下载在什么地方?

  • 回复于 2012-12-20 14:41 举报

    学习了 !!

  • 回复于 2012-11-01 18:28 举报

    默认的Module不好用么?

  • 回复于 2012-10-09 11:51 举报

    我是按照这种方式前后台分离的结构,在后台文章列表中点击标题我想弹出一个页面显示文章的内容,这个地址为前台显示的地址,不知道怎么才能在后台调用前台的地址?而且前台的url是伪静态,后台地址为动态地址!:(

  • 回复于 2012-09-28 07:07 举报

    舰长,我前后台搭好了,按照你的方法可是我不是的 srbac 怎么安装控制前后台啊

  • 回复于 2012-09-28 03:19 举报

    问舰长一个问题啊 我按照你的方法配置好了 前后台了
    现在我通过前台的gii 生成了 对应的 testmodel 控制器也是 testcontroller 这都没问提
    我想问的是 通过前台不能生成后台的 c 和view么
    是不是要从后台重新用gii生成 c和v呢?求解

  • 回复于 2012-09-14 15:14 举报

    我也想找一个 yii的网站看看 一直想做网站 没机会哎

  • 回复于 2012-07-21 14:04 举报

    對於用modules 只是在modules 將 admin & front 分成兩個目錄作區分
    那麼這樣 modules 不就沒有用意了嗎?!
    反而更加的混亂?!

  • 回复于 2012-06-25 14:25 举报

    努力学习中、、、

  • 回复于 2012-06-25 10:34 举报

    不错的东西!早没知道

  • 回复于 2012-06-23 15:58 举报

    最后我选用了modules的方式。

  • 回复于 2012-06-23 11:50 举报

    這樣的方式真的很方便
    但在開發多模組時
    是不是在規劃上應該就要用 modules 的方式呢?!

  • 回复于 2012-06-07 14:16 举报

    直接弄到一个module里面也可以分离,就没这么麻烦了。

  • 回复于 2012-06-05 11:37 举报

    很经典,我就用的这个方法。

  • 回复于 2012-06-05 10:58 举报

    呵呵。。。先收藏了,mark一下,以后说不定可以用到,thx 舰长

  • 回复于 2012-06-03 16:55 举报

    好文章,正好用上了。

  • 回复于 2012-05-08 20:28 举报

    下下来看个究竟。

  • 回复于 2012-05-08 18:31 举报

    :lol感觉第一种比较喜欢

您需要登录后才可以回复。登录 | 立即注册