Extbase не распознает пользовательский JsonView

Я использую typo3 7.6.
Я не могу заставить extbase взять мой пользовательский JsonView, похоже, он его не распознает.

Я перезаписываю JsonView по умолчанию следующим образом:

use TYPO3\CMS\Extbase\Mvc\View\JsonView as ExtbaseJsonView;
class JsonView extends ExtbaseJsonView
{
/**
* @var array
*/
protected $configuration = [
'jobs' => [
'_exclude' => ['pid'],
'_descend' => [
'place' => [
'_only' => ['name']
]
]
],
];
}

РЕДАКТИРОВАТЬ: Согласно этому доку

Теперь я не понимаю, почему я все еще получаю этот вывод как Json:

[{"description":"Owns products","pensum":100,"pid":55,"test":"Product","title":"Product Owner","uid":1}]

Один pid все еще там, даже если он находится в поле исключения, и место не выходит из расчета. Кажется, что extbase игнорирует мое переопределение, но я не знаю почему, и никаких ошибок не выдается. Я поместил свой пользовательский JsonView в Classes / View / JsonView.php

Мои модели:

работа

/**
* Job
*/
class Job extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
{
/**
* title
*
* @var string
* @validate NotEmpty
*/
protected $title = '';

/**
* description
*
* @var string
*/
protected $description = '';

/**
* pensum
*
* @var int
*/
protected $pensum = 0;

/**
* test
*
* @var string
*/
protected $test = '';

/**
* place
*
* @var \Vendor\SfpJobs\Domain\Model\Place
*/
protected $place = null;

// below getter and setter

}

места

/**
* Places
*/
class Place extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
{

/**
* name
*
* @var string
* @validate NotEmpty
*/
protected $name = '';

/**
* numberOfEmployees
*
* @var int
* @validate NotEmpty
*/
protected $numberOfEmployees = 0;

/**
* acquired
*
* @var \DateTime
* @validate NotEmpty
*/
protected $acquired = null;

// below getter and setter

}

контроллер

/**
* JobAjaxController
*/
class JobAjaxController extends ActionController
{

/**
* @var string
*/
protected $defaultViewObjectName = \TYPO3\CMS\Extbase\Mvc\View\JsonView::class;

/**
* jobRepository
*
* @var \Vendor\SfpJobs\Domain\Repository\JobRepository
* @inject
*/
protected $jobRepository = NULL;

/**
* placeRepository
*
* @var \Vendor\SfpJobs\Domain\Repository\PlaceRepository
* @inject
*/
protected $placeRepository = NULL;

/**
* action list
* This function
*
* @param \Vendor\SfpJobs\Domain\Model\Job $job
* @return void
*/
public function listAction()
{
$jobs = $this->jobRepository->findAll();
$this->view->assign('jobs', $jobs);
$this->view->setVariablesToRender(array('jobs'));
}
}

2

Решение

Я нашел ответ, было две ошибки, одна была моей ошибкой, другая кажется мне плохой документацией.
Я все еще использовал Jsonview по умолчанию в моем контроллере
так что мне нужно

protected $defaultViewObjectName = \Vendor\Jobs\View\JsonView::class;

вместо

protected $defaultViewObjectName = \TYPO3\CMS\Extbase\Mvc\View\JsonView::class;

Вторым был мой неисправный конфиг Jsonview.
в доку это читает

'variable3' => array(
*          '_exclude' => array('secretTitle'),
*          '_descend' => array(
*              'customer' => array(
*                  '_only' => array('firstName', 'lastName')
*              )
*          )
*      ),

Я думал, что переменная 3 может быть массивом, но это не так. Обозначение для массивов выглядит так:

'somearrayvalue' => array(
*          '_descendAll' => array(
*              '_only' => array('property1')
*          )
*      )

так в итоге у меня был этот конфиг

protected $configuration = [
'jobs' => [
'_descendAll' => [
'_exclude' => ['pid'],
'_descend' => [
'place' => [
'_only' => ['name']
]
]
]
],
];
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]