Maison  >  Article  >  développement back-end  >  Yii2 Yii::$container设置类的setter为何无效呢?

Yii2 Yii::$container设置类的setter为何无效呢?

WBOY
WBOYoriginal
2016-06-06 20:15:091235parcourir

<code>if(isset($_COOKIE['gridShowRows'])){
    Yii::$container->set('yii\data\BaseDataProvider',[
        'pagination'=>[
            'pageSize'=>$_COOKIE['gridShowRows']
        ]
    ]);
}</code>

yii\data\BaseDataProvider有一个setPagination的方法。

<code>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.');
        }
    }</code>

设置后不起效果。

但是下面的设置却又效果:

<code>if(isset($_COOKIE['gridShowRows'])){
    Yii::$container->set('yii\data\Pagination',[
        'pageSize'=>$_COOKIE['gridShowRows']
    ]);
}</code>

yii\data\Pagination有一个setPageSize的方法:

<code>/**
     * @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;
        }
    }</code>

回复内容:

<code>if(isset($_COOKIE['gridShowRows'])){
    Yii::$container->set('yii\data\BaseDataProvider',[
        'pagination'=>[
            'pageSize'=>$_COOKIE['gridShowRows']
        ]
    ]);
}</code>

yii\data\BaseDataProvider有一个setPagination的方法。

<code>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.');
        }
    }</code>

设置后不起效果。

但是下面的设置却又效果:

<code>if(isset($_COOKIE['gridShowRows'])){
    Yii::$container->set('yii\data\Pagination',[
        'pageSize'=>$_COOKIE['gridShowRows']
    ]);
}</code>

yii\data\Pagination有一个setPageSize的方法:

<code>/**
     * @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;
        }
    }</code>

检查传入的数组中的参数名。

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn