【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的一些使用方法

有不少地方都不完善,还望你们指出修正,若是你以为这个对你有用,还请点个赞,谢谢!

相关文章
相关标签/搜索