我 && yii2 (路由優化)

今天配置了一下yii2 的路由,用 /index.php?r=... 這樣的路由,實在是不太習慣,因此我便試着把yii2 的路由,寫成laravel 那般,如下爲詳情php

1.環境介紹mysql

  lnmp php5.6, mysql5.5, lnmp1.2 nginx

  yii2-advancedlaravel

 

2.在 frontend/config/main.php 中,添加如下內容 web

 

'urlManager' => [
            'enablePrettyUrl' => true,  //開啓URL美化 
            'showScriptName' => false,  //禁用index.php文件 
            'rules' => require_once '../config/routes.php',   //載入路由設置文件 routes.php           

        ],


 

3.書寫 routes.php 文件,之因此使用文件這樣的格式,是爲了不main.php 文件過於冗餘sql

<?php
return [
    'test.json' => 'demo/test',                 //未指定請求方式是,能夠爲如何方式,相似laravel 中的 any

    'POST api-post' => 'demo/post-test',        //POST 表示用post 方式請求, actionPostTest ==> post-test

    'get-demo/<id:\d+>' => 'demo/get-id',       //<id:\d+>  表示url中傳遞參數 id=??
];

  

 

 * api/test/test.json 爲訪問的url連接,demo/test 對應的是 控制器 DemoController 的 actionTest 方法json

 * 至於該routes.php 更多的用法,能夠參考 laravel 的路由設置,在結合yii2 來進行api

 

4. 編寫 DemoController 控制器yii2

<?php
namespace frontend\controllers;

use Yii;
use yii\web\Controller;


/**
 * Site controller
 */
class DemoController extends Controller{

    public $layout = false; //不使用佈局
    public  $enableCsrfValidation=false;

    //any www.yii2.com/test.json
    public function actionTest()
    {
        echo json_encode(['name'=>'zeopean']);
    }

    //post www.yii2.com/api-post
    public function actionPostTest()
    {
        echo json_encode(['name'=>'zeopean', 'method'=>'post']);

    }

    //any www.yii2.com/get-demo/12
    public function actionGetId()
    {
        $request = Yii::$app->request;
        $id = $request->get('id');
        echo json_encode(['id'=>$id]);
    }
}

  

 

5. 若是你覺得這樣就能夠運行,那就錯了,你還須要在咱們的nginx 中稍做配置,具體以下app

        location / {
                if (!-e $request_filename){
                rewrite ^/(.*) /index.php last;
                }
        }

 

  1. url的使用

  • \Yii :: $app->urlManager 的使用
echo \Yii::$app->urlManager->createUrl(['site/page', 'id' => 'about']);
// /index.php/site/page/id/about/

echo \Yii::$app->urlManager->createUrl(['date-time/fast-forward', 'id' => 105])
// /index.php?r=date-time/fast-forward&id=105

echo \Yii::$app->urlManager->createAbsoluteUrl('blog/post/index');
// http://www.example.com/index.php/blog/post/index/

  

  • yii\helpers\Url 的使用
use yii\helpers\Url;
 
// 當前活動路由
// /index.php?r=management/default/users
echo Url::to('');
 
// 相同的控制器,不一樣的動做
// /index.php?r=management/default/page&id=contact
echo Url::toRoute(['page', 'id' => 'contact']);
 
 
// 相同模塊,不一樣控制器和動做
// /index.php?r=management/post/index
echo Url::toRoute('post/index');
 
// 絕對路由,無論是被哪一個控制器調用
// /index.php?r=site/index
echo Url::toRoute('/site/index');
 
// 區分大小寫的控制器動做 `actionHiTech` 的 url 格式
// /index.php?r=management/default/hi-tech
echo Url::toRoute('hi-tech');
 
// 控制器和動做都區分大小寫的 url,如'DateTimeController::actionFastForward' :
// /index.php?r=date-time/fast-forward&id=105
echo Url::toRoute(['/date-time/fast-forward', 'id' => 105]);
 
//  從別名中獲取 URL 
// http://google.com/
Yii::setAlias('@google', 'http://google.com/');
echo Url::to('@google');
 
// 獲取當前頁的標準 URL 
// /index.php?r=management/default/users
echo Url::canonical();
 
// 得到 home 主頁的 URL
// /index.php?r=site/index
echo Url::home();
 
Url::remember() ; //  保存URL以供下次使用

Url::previous(); // 取出前面保存的 URL

  

 

 好了,這樣就能夠了

相關文章
相關標籤/搜索