【Laravel學習篇 · 二】在Laravel中借鑑Yii的params使用方法

前段時間原本準備學習 Laravel 的,後來由於換了工做的緣由,又回到本身經常使用的 Yii 。如今要將 Laravel 重拾回來,開始學習這個被PHPer們喜好的東西。php

上一篇敢關於 Laravel 的文章 【Laravel學習篇 · 一】Windows下起步就遇麻煩。這一篇講講在 Laravel 中借鑑 Yii 的一些使用方法。laravel


情景

在網站開發中,咱們一般會有不少的基本固定的參數,好比站點標題copyrighturl等,看到這些咱們一般會去config文件裏面找,由於這些參數基本都是固定的,不多改動,就算改動也很簡單。
但還有一些狀況就是,如user表有一個字段gander0或者1,表示女生男生,在拿到數據在頁面顯示時確定不該該顯示01,而是轉換爲對應的文字信息。初學者多是這樣作的:git

<?php
    <?php if ($user->gander == 1): ?>
        <span>性別:<?php echo "男生";?></span>
    <?php else: ?>
        <span>性別:<?php echo "女生";?></span>
    <?php endif ?>
?>

但會隨着網站的功能的變化發生變化,這時候須要添加一個2表示保密。那這時候咱們還得去那個地方改動php的判斷條件:github

<?php
    <?php if ($user->gander == 1): ?>
        <span>性別:<?php echo "男生";?></span>
    <?php elseif($user->gander == 2): ?>
        <span>性別:<?php echo "保密";?></span>
    <?php else: ?>
        <span>性別:<?php echo "女生";?></span>
    <?php endif ?>
?>

這樣的改動顯然是不舒服的,萬一老闆說不須要有保密這個選項的時候,萬一這樣的改動有十個地方,萬一......
這仍是一個性別,若是還有其餘不少的相似這樣的操做,好比typeis_actived等等。面對這樣的處理,有沒有一些便捷、可擴展的配置呢?咱們能夠來看看Yii中的方法。數據庫

Yii 中的解決辦法

面對什麼的狀況,在 Yii 中有一個很好的方法。當你開始學習 Yii 的時候,你已經注意到了config文件夾中的配置文件main.php,並且你會發現,在這個main.php文件中有一個params選項,這個是幹嗎的呢?segmentfault

// Yii 1 中
'params' => array(
    'adminEmail' => 'yangyun4814@gmail.com',
    'gander' => [
        0 => '女生'
        1 => "男生",
        2 => "保密"
    ],
    // ......
),

// Yii 2 中
$params = array_merge(
    require(__DIR__ . '/../../common/config/params.php'),
    require(__DIR__ . '/params.php')
);
'params' => $params,

// __DIR__ . '/params.php' 中的內容
return [
    'adminEmail' => 'yangyun4814@gmail.com',
    'gander' => [
        0 => '女生'
        1 => "男生",
        2 => "保密"
    ]
];

那在頁面中這些數據是怎麼使用的呢?yii2

// controllers/UserController.php
public function actionIndex()
{
    $user = User::findOne(1);
    return $this->render('index',[
        'user' => $user
    ])
}

// views/user/index.php
// Yii 1
<span>性別:<?php echo Yii::app()->params['gander'][$user->gander];?></span>

// Yii 2
<span>性別:<?php echo \Yii::$app->params['gander'][$user->gander];?></span>

這樣的方式是否是很舒服呢?寫代碼也方便不少呢?那在 Laravel 中如何去運用這樣的方式呢?app

Laravel中如何借鑑

在 Laravel 中運用 Yii 的這種方式其實也很簡單,閱讀官方的文檔就會發現有一個東西叫config('name'),這個就是從配置文件夾config中回去配置細細,好比config('app.url')會獲取到/config/app.php中的url配置項。yii

// config/app.php
return [
    'debug' => env('APP_DEBUG', false),
    'url' => 'http://blog.helloarron.com',
    'timezone' => 'UTC',
]

看到這裏你大概已經知道了如何實現params的設置了。Let's GO ~
config文件夾中新建文件params.php,而後內容以下:學習

return [
    'adminEmail' => 'yangyun4814@gmail.com',
    'gander' => [
        0 => '女生'
        1 => "男生",
        2 => "保密"
    ],
    'is_active' => [
        0 => '未激活',
        1 => '激活'
    ],
];

而後blade頁面中使用config('name')調用便可:

<span>性別:{{ config('params.gander')[$user->gander] }}</span>

存在的問題

在網友@Outshine的提示下,上面的方法在Yii中是存在問題的:

  • 國際化

  • 在IDE裏提示

關於國際化,上面在params中的valae不用寫中文,而是約定好的一些變量,而後經過Yii::t('filename', Yii::app()->params'gander');這樣就解決了國際化的問題。關於在IDE裏提示,這個就作不到了。
因此,關於從數據庫獲取一些須要轉換的值的時候,能夠在對應的模型裏面作:

//model中
public static function getTypeOption(){
    return [
        self::TYPE_A => Yii::t('model','type a'),
        self::TYPE_B => Yii::t('model','type b')
    ];
}
//view中
$form->field($model,'type')->dropdownList($model->getTypeOption()[$model->type]);

感謝網友@Outshine的意見和提供的一些資料:

這個是在 Laravel 中借鑑 Yiiparams 使用方法,其餘更多的關於 Laravel 的學習內容會在後續的不斷學習中總結並分享出來。

About Me

博客: http://blog.helloarron.com
Github: https://github.com/ArronYR
Email: yangyun4814@gmail.com


原文地址:【Laravel學習篇 · 二】在Laravel中借鑑Yii的一些使用方法

有不少地方都不完善,還望你們指出修正,若是你以爲這個對你有用,還請點個贊,謝謝!

相關文章
相關標籤/搜索