nerburish/yii2-daterange-validator

添加一个日期范围验证器,允许验证模型属性是否为有效的日期范围格式。特别适用于您想使用DateRangePicker小部件并按从/至值进行筛选的情况

安装数: 15,648

依赖项: 0

建议者: 0

安全: 0

星标: 5

关注者: 5

分支: 3

开放问题: 0

类型:yii2-extension

dev-master / 1.0.x-dev 2018-04-30 14:09 UTC

This package is not auto-updated.

Last update: 2024-09-18 20:25:16 UTC


README

http://nerburish.com/yii2-daterange-validator/ en 🇪🇸

日期范围验证器允许验证模型属性是否为有效的日期范围格式。特别适用于您想使用DateRangePicker小部件并按从/至值进行筛选的情况

Latest Stable Version Total Downloads Latest Unstable Version License

安装

安装此扩展的首选方式是通过composer

运行以下命令之一

php composer.phar require --prefer-dist nerburish/yii2-daterange-validator "dev-master"

"nerburish/yii2-daterange-validator": "dev-master"

将以下内容添加到您的composer.json文件的require部分。

示例:通过日期范围过滤模型属性

假设我们有一个具有'created_at'属性的模型,我们想在网格中通过日期范围过滤该时间戳。在我们的网格中,我们实现了一个字段或小部件,如kartik DateRangePicker(见http://demos.krajee.com/date-range),它以日期范围格式填充'created_at'输入,例如:12/08/2014至17/08/2015

我们需要转到搜索模型并添加规则到模型中。然后,我们必须将$fromDate和$untilDate属性添加到模型中;

use nerburish\daterangevalidator\DateRangeValidator;

public $fromDate;

public $untilDate;

public function rules()
{
	return [
		[['created_at'], DateRangeValidator::className()]
	];
}

如果传递给搜索模型的created_at值是有效的格式范围,则$fromDate和$untilDate将分别分配给相应的时间戳。然后,我们可以在查询中添加以下条件

$query->andFilterWhere(['between', 'created_at', $this->fromDate, $this->untilDate]);	

如果我们想使用其他默认名称以外的属性名称,我们应该这样传递属性名称

use nerburish\daterangevalidator\DateRangeValidator;

public $myInitialDateName;

public $myUntilDateName;

public function rules()
{
	return [
		[['created_at'], DateRangeValidator::className(), 'fromDateAttribute' => 'myInitialDateName', 'untilDateAttribute' => 'myUntilDateName']
	];
}

默认情况下,期望的是日期格式,此格式从Yii formatter组件中获取,但我们可以通过参数定义其他格式。由于只传递了日期,因此自动将起始时间设置为00:00:00,结束时间设置为23:59:59。我们还可以更改分隔符字符。例如:12-08-2014 / 17-08-2015

public function rules()
{
	return [
		[['created_at'], DateRangeValidator::className(), 'format' => 'php:d-m-Y', 'separator' => ' / ']
	];
}

然而,如果我们想直接传递日期时间而不是日期格式,那么我们应该这样配置验证器

public function rules()
{
	return [
		[['created_at'], DateRangeValidator::className(), 'type' => 'datetime', 'format' => 'php:d/m/Y H:i:s']
	];
}

如果我们只想验证范围是否有效,而不是将起始和结束时间戳分配给属性模型,我们可以这样配置验证器

public function rules()
{
	return [
		[['created_at'], DateRangeValidator::className(), 'setAttributes' => false]
	];
}