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模板中設置自己想要的效果,可以自己定義一些樣式。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM