diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php index fb6aca4396542..c182fb53b3880 100644 --- a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php +++ b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php @@ -14,7 +14,8 @@ class AjaxLoad extends \Magento\Tax\Controller\Adminhtml\Rate /** * Json needed for the Ajax Edit Form * - * @return void + * @return \Magento\Framework\Controller\Result\Json + * @throws \InvalidArgumentException */ public function execute() { diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php index 354865e5828ef..f6cd0fff9c9b0 100644 --- a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php +++ b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php @@ -14,6 +14,7 @@ class AjaxSave extends \Magento\Tax\Controller\Adminhtml\Rate * Save Tax Rate via AJAX * * @return \Magento\Framework\Controller\Result\Json + * @throws \InvalidArgumentException */ public function execute() { diff --git a/lib/internal/Magento/Framework/Controller/Result/Json.php b/lib/internal/Magento/Framework/Controller/Result/Json.php index 3349d4507577b..2615aa5b94bb2 100644 --- a/lib/internal/Magento/Framework/Controller/Result/Json.php +++ b/lib/internal/Magento/Framework/Controller/Result/Json.php @@ -29,24 +29,63 @@ class Json extends AbstractResult protected $json; /** - * @param \Magento\Framework\Translate\InlineInterface $translateInline + * @var \Magento\Framework\Serialize\Serializer\Json */ - public function __construct(InlineInterface $translateInline) - { + private $serializer; + + /** + * @param InlineInterface $translateInline + * @param \Magento\Framework\Serialize\Serializer\Json|null $serializer + * @throws \RuntimeException + */ + public function __construct( + InlineInterface $translateInline, + \Magento\Framework\Serialize\Serializer\Json $serializer = null + ) { $this->translateInline = $translateInline; + $this->serializer = $serializer ?: \Magento\Framework\App\ObjectManager::getInstance() + ->get(\Magento\Framework\Serialize\Serializer\Json::class); } /** * Set json data * - * @param mixed $data - * @param boolean $cycleCheck Optional; whether or not to check for object recursion; off by default - * @param array $options Additional options used during encoding - * @return $this + * @param array|string|\Magento\Framework\DataObject $data + * @param bool $cycleCheck + * @param array $options + * @return Json + * @throws \InvalidArgumentException + * @throws \Magento\Framework\Exception\LocalizedException + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @deprecated */ public function setData($data, $cycleCheck = false, $options = []) { - $this->json = \Zend_Json::encode($data, $cycleCheck, $options); + if ($data instanceof \Magento\Framework\DataObject) { + return $this->setArrayData($data->toArray()); + } + + if (is_array($data)) { + return $this->setArrayData($data); + } + + if (is_string($data)) { + return $this->setJsonData($data); + } + + throw new \Magento\Framework\Exception\LocalizedException( + new \Magento\Framework\Phrase('Invalid argument type') + ); + } + + /** + * @param array $data + * @return $this + * @throws \InvalidArgumentException + */ + public function setArrayData(array $data) + { + $this->setJsonData($this->serializer->serialize($data)); return $this; }