Yii2 Yii::$container设置类的setter为何无效呢?
程序员文章站
2022-04-25 10:11:39
...
if(isset($_COOKIE['gridShowRows'])){
Yii::$container->set('yii\data\BaseDataProvider',[
'pagination'=>[
'pageSize'=>$_COOKIE['gridShowRows']
]
]);
}
yii\data\BaseDataProvider有一个setPagination的方法。
public function setPagination($value)
{
if (is_array($value)) {
$config = ['class' => Pagination::className()];
if ($this->id !== null) {
$config['pageParam'] = $this->id . '-page';
$config['pageSizeParam'] = $this->id . '-per-page';
}
$this->_pagination = Yii::createObject(array_merge($config, $value));
} elseif ($value instanceof Pagination || $value === false) {
$this->_pagination = $value;
} else {
throw new InvalidParamException('Only Pagination instance, configuration array or false is allowed.');
}
}
设置后不起效果。
但是下面的设置却又效果:
if(isset($_COOKIE['gridShowRows'])){
Yii::$container->set('yii\data\Pagination',[
'pageSize'=>$_COOKIE['gridShowRows']
]);
}
yii\data\Pagination有一个setPageSize的方法:
/**
* @param integer $value the number of items per page.
* @param boolean $validatePageSize whether to validate page size.
*/
public function setPageSize($value, $validatePageSize = false)
{
if ($value === null) {
$this->_pageSize = null;
} else {
$value = (int) $value;
if ($validatePageSize && isset($this->pageSizeLimit[0], $this->pageSizeLimit[1]) && count($this->pageSizeLimit) === 2) {
if ($value pageSizeLimit[0]) {
$value = $this->pageSizeLimit[0];
} elseif ($value > $this->pageSizeLimit[1]) {
$value = $this->pageSizeLimit[1];
}
}
$this->_pageSize = $value;
}
}
回复内容:
if(isset($_COOKIE['gridShowRows'])){
Yii::$container->set('yii\data\BaseDataProvider',[
'pagination'=>[
'pageSize'=>$_COOKIE['gridShowRows']
]
]);
}
yii\data\BaseDataProvider有一个setPagination的方法。
public function setPagination($value)
{
if (is_array($value)) {
$config = ['class' => Pagination::className()];
if ($this->id !== null) {
$config['pageParam'] = $this->id . '-page';
$config['pageSizeParam'] = $this->id . '-per-page';
}
$this->_pagination = Yii::createObject(array_merge($config, $value));
} elseif ($value instanceof Pagination || $value === false) {
$this->_pagination = $value;
} else {
throw new InvalidParamException('Only Pagination instance, configuration array or false is allowed.');
}
}
设置后不起效果。
但是下面的设置却又效果:
if(isset($_COOKIE['gridShowRows'])){
Yii::$container->set('yii\data\Pagination',[
'pageSize'=>$_COOKIE['gridShowRows']
]);
}
yii\data\Pagination有一个setPageSize的方法:
/**
* @param integer $value the number of items per page.
* @param boolean $validatePageSize whether to validate page size.
*/
public function setPageSize($value, $validatePageSize = false)
{
if ($value === null) {
$this->_pageSize = null;
} else {
$value = (int) $value;
if ($validatePageSize && isset($this->pageSizeLimit[0], $this->pageSizeLimit[1]) && count($this->pageSizeLimit) === 2) {
if ($value pageSizeLimit[0]) {
$value = $this->pageSizeLimit[0];
} elseif ($value > $this->pageSizeLimit[1]) {
$value = $this->pageSizeLimit[1];
}
}
$this->_pageSize = $value;
}
}
检查传入的数组中的参数名。
上一篇: js中arguments详解