Yii2在构造函数中缺少必需的参数

时间:2015-11-16 08:56:25

标签: yii2

我创建了一个新的XmlResponseFormatter,现在我要更改rootTag

class newXmlResponseFormatter extends XmlResponseFormatter 
{  
    /**
     * @var string the name of the root element.
     *
     */
    public $rootTag;

    public function __construct($rootTag) {        
        parent::__construct();

        $this->rootTag = $rootTag;        
    }
}

从控制器中我设置了该值:

$xmlFormater = new newXmlResponseFormatter('newRootTag');

在值可用的控制器中,它设置在$ rootTag中,但它引发了以下异常:

  

异常'yii \ base \ InvalidConfigException',并在实例化“app \ components \ override \ newXmlResponseFormatter”时显示消息'缺少必需参数“rootTag”。在/var/www/html/Admin/vendor/yiisoft/yii2/di/Container.php:451

有谁知道什么是问题? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

XmlResponseFormatter中的第一个参数是$config,因为XmlResponseFormatter扩展了Object类。你是violated liskov substitution principle

你应该像这样重写你的构造函数:

class newXmlResponseFormatter extends XmlResponseFormatter
{
    /**
     * @var string the name of the root element.
     *
     */
    public $rootTag;

    /**
     * newXmlResponseFormatter constructor.
     *
     * @param string $rootTag
     * @param array $config
     */
    public function __construct($rootTag, $config = [])
    {
        $this->rootTag = $rootTag;

        parent::__construct($config);
    }
}

在yii2中,您应该在代码之后调用父构造函数,并在代码之前调用父init

$config需要简单的配置模型,如下所示:

new newXmlResponseFormatter(['rootTag' => 'newRootTag']);