Heim  >  Artikel  >  Backend-Entwicklung  >  Yii2 Yii::$container设置类的setter为何无效呢?

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

WBOY
WBOYOriginal
2016-06-06 20:15:091235Durchsuche

<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>

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn