stesi/yii2-daterange-validator

添加一个日期范围验证器,允许验证模型属性是否为有效的日期范围格式。特别适用于您想使用日期范围选择器小部件并按起始/结束值过滤时

安装: 33

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 3

类型:yii2-extension

v1.2 2017-12-06 08:27 UTC

This package is not auto-updated.

Last update: 2024-09-18 04:10:55 UTC


README

允许验证模型属性是否为有效日期范围格式的日期范围验证器。特别适用于您想使用日期范围选择器小部件并按起始/结束值过滤时

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 日期范围选择器(见 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 格式化组件中获取的,但我们可以通过参数定义其他格式。由于只传递了日期,自动将起始时间设置为 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]
	];
}