yii 初始化时如何配置默认访问某个文件?

入口脚本 http://www.yiichina.com/doc/guide/2.0/structure-entry-scripts
应用主体 http://www.yiichina.com/doc/guide/2.0/structure-applications

1. 在启动yii时,入口脚本是应用启动流程中的第一环,一个应用(不管是网页应用还是控制台应用)只有一个入口脚本。
  网页应用: 通过web服务器(浏览器)进行访问时运行的机制, 配置文件: ./web/index.php
  控制台应用: 通过命令行(cmd/terminal)进行访问时运行的机制, 配置文件: ./yii
  该入口脚本作用(具体内容查看官网):
    定义全局常量;
    注册 Composer 自动加载器;
    包含 Yii 类文件;
    加载应用配置;
    创建一个应用实例并配置;
    调用 yii\base\Application::run() 来处理请求。
2. 在入口脚本中
  $config = require(__DIR__ . '/../config/web.php');

  (new yii\web\Application($config))->run();
  指明了应用运行时先访问web.php文件,执行完该文件才会执行我们想要执行的控制器(controller)

3. 在web.php中我自己添加了两个属性
  'defaultRoute' => 'home',
  'modules' => [
    'home' => 'app\home\Module'(这是自己创建的文件夹和初始文件,用来测试使用)
  ]
  modules(模块): 即将某个文件作为该应用包含的模块,在应用初始化时会同时加载。
  defaultRoute: 默认应用访问某个模块, 当未添加该属性时,web应用默认显示app\controllers\SiteController::actionIndex() 的结果, 控制台应用默认       yii\console\controllers\HelpController::actionIndex()
  这里设置该属性,访问Module文件

4. 进入Module文件

<?php
    namespace app\home;

    class Module extends \yii\base\Module
    {
        public $defaultRoute = 'test';

        public function init()
        {
            parent::init();
        }
}    

需要继承\yii\base\Module使用框架自带的方法初始化

$defaultRoute: 设置改文件(home)下的控制器文件(controller)下的某个文件为默认文件

init: 根据defaultRoute对默认文件进行加载

5. 进入TestController文件:

        class TestController extends Controller
            {
                public $defaultAction = 'test';
                public $enableCsrfValidation = false;

                public function behaviors()
                {
                    return ArrayHelper::merge([
                        [
                            'class' => Cors::className(),
                            'cors' => [
                                // 'Access-Control-Allow-Origin' => ['*'],
                                'Origin' => ['http://localhost:1024'],
                                'Access-Control-Request-Method' => ['get'],
                                'Access-Control-Allow-Credentials' => true,
                            ],
                        ],
                    ], parent::behaviors());
                }

                public function actionTest(){
                    $controllerName = Yii::$app->controller->id;
                    $actionName = Yii::$app->controller->action->id;
                    return $this->asJson($controllerName);
                    // return $this->asJson('yii run successfully in test method!' + $controllerName);
                }
            }

  $defaultAction: 默认加载某个方法

  这里基本初始化完成, 可以在TestController中设置,将URL与controller下的action一一对应来实现前后端的交互.

posted @ 2017-11-01 18:16  Iven_Han  阅读(931)  评论(0编辑  收藏  举报