我创建了一个新的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
有谁知道什么是问题? 提前谢谢!
答案 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']);