yii2 默认访问的控制器

用过框架的都知道,框架必然有一个入口文件index.php,来初始化环境。

1. yii2框架中自带site控制器,一进入网站,默认就会访问site控制器中index 这个action中的内容。

刚开始的时候很困惑,为什么一进入就会默认执行该控制器下面的方法。原来是因为yii2有个默认设置:

public $defaultRoute = 'site';

为什么为执行这个设置呢?是因为入口文件初始化环境的时候,我们要通过

(new yii\web\Application($config))->run();使用$config作为参数去创建Application对象实例。其中Application这个类有一些属性,其中就有

$defaultRoute,该属性就决定了默认执行的controller以及方法。

如果想默认使用自己编写的控制器,就可以改变该属性,那怎么改呢?
我们先看一下入口文件中的代码:
 1 defined('YII_DEBUG') or define('YII_DEBUG', true);
 2 defined('YII_ENV') or define('YII_ENV', 'dev');
 3 
 4 require(__DIR__ . '/vendor/autoload.php');
 5 require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
 6 require(__DIR__ . '/common/config/bootstrap.php');
 7 require(__DIR__ . '/frontend/config/bootstrap.php');
 8 
 9 $config = yii\helpers\ArrayHelper::merge(
10     require(__DIR__ . '/common/config/main.php'),
11     require(__DIR__ . '/common/config/main-local.php'),
12     require(__DIR__ . '/frontend/config/main.php'),
13     require(__DIR__ . '/frontend/config/main-local.php')
14 );
15 
16 (new yii\web\Application($config))->run();

首先会引入一些配置文件,然后定义了变量$config,然后传参数给 yii\web\Application类的构造函数,然后实例化。此时我们就可以在上面的配置文件中修改 defaultRoute参数,

return [
    'id' => 'app-frontend',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'defaultRoute'=>'main',]

这样就改成了默认执行main控制器下面的index action。当然了,其实也可以更改site控制器中的内容,一般可以修改site控制器index 方法对应的index模板,更改模板中显示的内容也可以。

 

2.

在做网站的过程中,大部分的页面结构都是相似的。如都有相同的头部和底部。各个页面这样仅仅是中间的部分不同。

Yii中的布局文件就是用来实现这样的功能。如:

布局文件:@app/views/layouts/main.php

默认我们使用的就是该布局文件,从而让网站的头部底部统一起来,为什么为默认为该布局文件呢?可不可以不适用这个布局文件?

答案是可以使用你想使用的任何布局文件,为什么为默认为main.php,原因与上述第一点类似,因为Application类中有个属性

public $layout = 'main';
所以其实我们可以修改该属性值,可以在layouts下面新建一个布局文件比如new.php,我们可以在controller里面修改$layout的值为new,或者修改main.php中的内容
1 public function actionIndex()
2     {      
3         $this->layout = 'new';        // 设置通用的模版为views/layouts/new.php
4         return $this->render('login'); //render()会将views/site/new.php拼接到通用模版中
5     }

也可以不适用模板文件,需要设置layout =false,可以在配置文件中添加,比如config/main.php中添加,亦可以在controller中作为属性修改,如

1 class AccountController extends Controller
2 {
3     public $layout = false;
4 }

然后可以自己在各个view模板中设置自己想要的效果,可以自己定义一些样式。

 
posted @ 2017-08-04 15:44  从心开始1986  阅读(3580)  评论(0编辑  收藏  举报