2017 © Pedro Peláez
 

yii2-extension yii2-tools

image

hubeiwei/yii2-tools

  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 3 Versions
  • 13 % Grown

The README.md

yii2-tools

自己在 yii2 上根据使用习惯来封装的一些东西,具体功能直接往下看吧。以后我有空会花时间把这些东西做成更灵活的可配置的。, (*1)

除了以下我给的一些使用方法,你也可以去看看我的 DEMO。, (*2)

语文不好,你看到这句话说明我已经大改了一次。, (*3)

目录

安装

执行:, (*13)

composer require hubeiwei/yii2-tools 1.1.x-dev

或者添加:, (*14)

"hubeiwei/yii2-tools": "1.1.x-dev"

由于查询缓存的功能提交到了框架源码,如果你的框架版本还是2.0.14之前的,可以把“dev-master”改成“1.0.x-dev”,就能使用了。, (*15)

因为是我自己用的东西,灵活性不一定高,如果你觉得这些代码不能100%满足你,你需要进行一些改动的话,你可以直接把代码下载下来,添加:, (*16)

"autoload": {
    "psr-4": {
        "hubeiwei\\yii2tools\\": "path/to/hubeiwei/yii2-tools"
    }
}

然后把该项目的 composer.json 文件里 require 的包都加到你自己的 composer.json 里,执行 composer update。如果你已经有了这些包,直接执行 composer dump-autoload 即可。, (*17)

查询

准备工作

以下3种方法自选一种:, (*18)

1:如果你 model 继承的类还是 yii\db\ActiveRecord,你可以改成 hubeiwei\yii2tools\extensions\ActiveRecord。, (*19)

2:如果你已经有了自己的 ActiveRecord 类,但并没有 ActiveQuery 类,你可以把 find() 方法改成以下代码:, (*20)

public static function find()
{
    return Yii::createObject('hubeiwei\yii2tools\extensions\ActiveQuery', [
        get_called_class(),
        [
            'timeRangeSeparator' => '~',
        ],
    ]);
}

3:如果你已经有了自己的 ActiveQueryQuery 类,你可以直接引入我的 trait:\hubeiwei\yii2tools\extensions\ActiveQuery\QueryTrait。, (*21)

开始使用

实例化 ActiveQueryQuery:, (*22)

$query = \common\models\User::find();
// or
$query = new \hubeiwei\yii2tools\extensions\Query([
    'timeRangeSeparator' => '-',
]);

数字范围查询:, (*23)

// WHERE money = 1
$query->compare('money', 1);

// WHERE money > 1 AND money < 3 AND money = 2
$query->compare('money', '>1,,<3 =2');

日期范围查询:, (*24)

$dateRange = '2017/01/01 - 2018/01/01';

// WHERE time BETWEEM 1483200000 AND 1514822399
$query->timeRangeFilter('time', $dateRange, true, true);

// WHERE time BETWEEM '2017/01/01 00:00:00' AND '2018/01/01 23:59:59'
$query->timeRangeFilter('time', $dateRange, true, false);

时间范围查询:, (*25)

$dateTimeRange = '2017/01/01 01:01:01 - 2018/01/01 23:59:59';

// WHERE time BETWEEM 1483203661 AND 1514822399
$query->timeRangeFilter('time', $dateTimeRange, false, true);

// WHERE time BETWEEM '2017/01/01 01:01:01' AND '2018/01/01 23:59:59'
$query->timeRangeFilter('time', $dateTimeRange, false, false);

日期范围查询配置

日期范围查询的默认分割字符串是“-”,如果你想修改这个配置,方法如下:, (*26)

1:参考准备工作里的第2条,单这里就有至少3种做法。, (*27)

2:DI 容器,如果你是用 Yii::createObject() 实例化 ActiveQuery,在你的 bootstrap.php 文件添加以下代码:, (*28)

// 这里配置的类需要根据你具体用到的 `ActiveQuery` 类而定。
Yii::$container->set('hubeiwei\yii2tools\extensions\ActiveQuery', [
    'timeRangeSeparator' => '~',
]);

3:Query 类需要在实例化的时候修改,参考开始使用的实例化部分。, (*29)

Widget

下面代码是枚举字段查询用到的,仅仅是提供一种方便维护的参考,如果你有自己的解决方案可以跳过。, (*30)

use yii\helpers\ArrayHelper;

const STATUS_ACTIVE = 1;
const STATUS_INACTIVE = 0;

/**
 * @param int $value
 * @return array|string|null
 */
public static function statusMap($value = null)
{
    $map = [
        self::STATUS_ACTIVE => '启用',
        self::STATUS_INACTIVE => '禁用',
    ];
    if ($value === null) {
        return $map;
    }
    return ArrayHelper::getValue($map, $value);
}

以下是一个视图的代码:, (*31)

use common\models\User;
use hubeiwei\yii2tools\grid\ActionColumn;
use hubeiwei\yii2tools\grid\SerialColumn;
use hubeiwei\yii2tools\helpers\RenderHelper;
use hubeiwei\yii2tools\widgets\DateRangePicker;
use hubeiwei\yii2tools\widgets\Select2;

/**
 * @var $this yii\web\View
 * @var $searchModel app\models\search\ArticleSearch
 * @var $dataProvider yii\data\ActiveDataProvider
 */

$this->title = '标题';

$gridColumns = [
    ['class' => SerialColumn::className()],

    // 枚举字段查询(下拉框)
    [
        'attribute' => 'status',
        'value' => function ($model) {
            return User::statusMap($model->status);
        },
        'filter' => RenderHelper::dropDownFilter($searchModel, 'status', User::statusMap()),
        // 当然你在 filter 这里直接给 User::statusMap() 也可以,你对比一下就发现两种方法的区别了
    ],

    // 枚举字段查询(Select2)
    [
        'attribute' => 'status',
        'value' => function ($model) {
            return User::statusMap($model->status);
        },
        'filterType' => Select2::className(),
        'filterWidgetOptions' => [
            'data' => User::statusMap(),
        ],
    ],

    // 时间范围查询
    [
        'attribute' => 'created_at',
        'format' => 'dateTime',
        'filterType' => DateRangePicker::className(),
        /*'filterWidgetOptions' => [
            'dateOnly' => true,
            'dateFormat' => 'Y/m/d',
            'separator' => ' - ',
        ],*/
    ],

    ['class' => ActionColumn::className()],
];

// GridView
echo RenderHelper::gridView($dataProvider, $gridColumns, $searchModel);

// DynaGrid
echo RenderHelper::dynaGrid('grid-id', $dataProvider, $gridColumns, $searchModel);

本节示例插件的 DEMO:, (*32)

消息提示

设置消息:, (*33)

use hubeiwei\yii2tools\helpers\Message;

\Yii::$app->session->setFlash(Message::TYPE_INFO, 'some message');
// or
Message::setSuccessMsg('success message');
// or
Message::setErrorMsg(['error1 message', 'error2 message']);

输出消息:, (*34)

use hubeiwei\yii2tools\widgets\Alert;
use hubeiwei\yii2tools\widgets\Growl;

echo Alert::widget();
// or
echo Growl::widget();

建议放在布局里,一劳永逸, (*35)

本节示例插件的 DEMO:, (*36)

  • Alert:这个没啥好说的,就是 bootstrap 的 Alert
  • Growl:进去之后看到一个表单,提交后可以看到 Demo

在 View 如何更好的把 js 和 css 注入到布局

来源:, (*37)

以下是一个视图的代码:, (*40)

<?php

use hubeiwei\yii2tools\widgets\CssBlock;
use hubeiwei\yii2tools\widgets\JsBlock;
use yii\web\View;

/**
 * @var $this yii\web\View
 */

$this->title = '标题';
?>

<?php CssBlock::begin(); ?>
<style>
    .my-width {
        width: 100%;
    }
</style>
<?php CssBlock::end(); ?>

<?php JsBlock::begin(['pos' => View::POS_END]); ?>






原文:为什么要这么写?这样写的好处有两个,有代码提示和代码高亮。, (*41)

打赏

如果觉得我做的东西对你有帮助的话,求打赏一杯 coffee,这样我会有更多动力去分享更多 yii2 的内容。, (*42)

支付宝, (*43)

微信, (*44)

The Versions