Typo3 extbase json 输出
Typo3 extbase json output
我尝试创建处理 ajax 请求的控制器。
我发现,我必须将其添加到我的 TS 配置中:
ajaxCall = PAGE
ajaxCall {
typeNum = 999
config.disableAllHeaderCode = 1
config.metaCharset = UTF-8
xhtml_cleaning = 0
admPanel = 0
10 = COA
10 < tt_content.list.20.registration_userregistration
}
我的控制器看起来像这样:
/**
* JSONController
*/
class JSONController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
/**
* @var string
*/
protected $defaultViewObjectName = 'TYPO3\CMS\Extbase\Mvc\View\JsonView';
/**
* action test
*
* @return string
*/
public function testAction() {
$this->view->assign('value', "001");
}
}
这有效,我得到一个空白页,上面有“001”。但是如果我看源代码,有4行空行,“001”在第5行。
-empty-
-empty-
-empty-
-empty-
"001"
我不知道为什么...
我不明白,为什么要使用某些视图进行渲染 JSON ???
public function testAction() {
$data = array('value'=>'001');
return json_encode($data);
}
当然你应该设置 Content-type: application/json
- 你喜欢在哪里 - 在你的 TS 中或直接在 return;
之前的动作中
其他线索:可能它是由tt_content引起的(只是猜测),对于JSON操作它是最好通过 Bootstrap 直接包含它们,首先在 ext_localconf.php
:
中注册新的 FE 插件
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'VENDORNAME.' . $_EXTKEY,
'JsonDataPlugin',
array('JSON' => 'test',),
array('JSON' => 'test',)
);
并修改你的TS:
myAjaxPage = PAGE
myAjaxPage {
typeNum = 999
10 = USER
10 {
userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
extensionName = Yourextname
pluginName = JsonDataPlugin
vendorName = VENDORNAME
}
config {
disableAllHeaderCode = 1
additionalHeaders = Content-type:application/json
xhtml_cleaning = 0
admPanel = 0
debug = 0
no_cache = 1
}
}
(不要忘记为自己更改 Yourextname 和 VENDORNAME,同时清除系统缓存)
最后: 检查所有文件并确保在 <?php
之前和 ?>
之后没有空行(最好的选择是删除 ?>
来自每个文件 - 并让 PHP 在文件末尾终止脚本)。它也可以在 TYPO3 的源代码中修复,如 other naswer 中所述。
好的,我知道了...
我包含了一个文件,其中包含一些名为 user.php
的函数
/**
* User service
*
* @var \Whmcs\Registration\Service\User
* @inject
*/
protected $user = NULL;
在此文件中,?> 标记后有空行。这些空行是问题所在。我删除了它们,现在一切正常。 :)
我尝试创建处理 ajax 请求的控制器。
我发现,我必须将其添加到我的 TS 配置中:
ajaxCall = PAGE
ajaxCall {
typeNum = 999
config.disableAllHeaderCode = 1
config.metaCharset = UTF-8
xhtml_cleaning = 0
admPanel = 0
10 = COA
10 < tt_content.list.20.registration_userregistration
}
我的控制器看起来像这样:
/**
* JSONController
*/
class JSONController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
/**
* @var string
*/
protected $defaultViewObjectName = 'TYPO3\CMS\Extbase\Mvc\View\JsonView';
/**
* action test
*
* @return string
*/
public function testAction() {
$this->view->assign('value', "001");
}
}
这有效,我得到一个空白页,上面有“001”。但是如果我看源代码,有4行空行,“001”在第5行。
-empty-
-empty-
-empty-
-empty-
"001"
我不知道为什么...
我不明白,为什么要使用某些视图进行渲染 JSON ???
public function testAction() {
$data = array('value'=>'001');
return json_encode($data);
}
当然你应该设置 Content-type: application/json
- 你喜欢在哪里 - 在你的 TS 中或直接在 return;
其他线索:可能它是由tt_content引起的(只是猜测),对于JSON操作它是最好通过 Bootstrap 直接包含它们,首先在 ext_localconf.php
:
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'VENDORNAME.' . $_EXTKEY,
'JsonDataPlugin',
array('JSON' => 'test',),
array('JSON' => 'test',)
);
并修改你的TS:
myAjaxPage = PAGE
myAjaxPage {
typeNum = 999
10 = USER
10 {
userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
extensionName = Yourextname
pluginName = JsonDataPlugin
vendorName = VENDORNAME
}
config {
disableAllHeaderCode = 1
additionalHeaders = Content-type:application/json
xhtml_cleaning = 0
admPanel = 0
debug = 0
no_cache = 1
}
}
(不要忘记为自己更改 Yourextname 和 VENDORNAME,同时清除系统缓存)
最后: 检查所有文件并确保在 <?php
之前和 ?>
之后没有空行(最好的选择是删除 ?>
来自每个文件 - 并让 PHP 在文件末尾终止脚本)。它也可以在 TYPO3 的源代码中修复,如 other naswer 中所述。
好的,我知道了...
我包含了一个文件,其中包含一些名为 user.php
的函数/**
* User service
*
* @var \Whmcs\Registration\Service\User
* @inject
*/
protected $user = NULL;
在此文件中,?> 标记后有空行。这些空行是问题所在。我删除了它们,现在一切正常。 :)