Ganz einfach:
im Controller folgende Klassenvariable setzen:
protected $supportedFormats = array("html", "json");
protected $viewFormatToObjectNameMap = array(
"json" => "\TYPO3\FLOW3\MVC\View\JsonView",
"html" => "\TYPO3\Fluid\View\TemplateView"
);
und in der Routes.yml (bzw. im Routing) einen Eintrag nach folgendem Muster vornehmen:
-
name: '[name_der_route]'
uriPattern: '[gewünschter_pfad]'
defaults:
'@package': '[package_name]'
'@action': '[action_im_controller]'
'@controller': '[controller]'
'@format': 'json'
Mit der Klassenvariable sorgt ihr dafür, dass der Controller beim Format “json” auf ein Template verzichtet und den Return-Value einer Action direkt ausgibt (also im Normalfall per json_encode() formatiert). Mit der Konfiguration der Route legt ihr nur noch fest, dass die jeweilige Action an Stelle von HTML lieber JSON verwendet.
[Update]
Nach der Frage von Mario hier nochmal als Nachtrag eine entsprechende Beispiel-Action:
/**
*
* @param string $param
*
* @return json test data
*/
public function getDataAction($param) {
$data = array("testKey"=>$param, "testKey2"=>"testValue2");
return json_encode($data);
}