我使用的是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']
]
]
],
];
}编辑:根据此docu
现在我不明白为什么我仍然以Json的身份得到这个输出:
[{"description":"Owns products","pensum":100,"pid":55,"test":"Product","title":"Product Owner","uid":1}]其一,pid仍然在那里,即使它在排除字段中,并且位置不被输出。似乎extbase忽略了我的覆盖,但我不知道为什么,也没有抛出任何错误。我把我的自定义类放到了JsonView /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'));
}
} 发布于 2016-03-17 21:19:46
我找到了答案,有两个错误,一个是我的错,另一个在我看来像是糟糕的文档。我仍然在控制器中使用默认的Jsonview,所以我需要
protected $defaultViewObjectName = \Vendor\Jobs\View\JsonView::class;而不是
protected $defaultViewObjectName = \TYPO3\CMS\Extbase\Mvc\View\JsonView::class;第二个问题是我有问题的Jsonview配置。在docu中,它显示为
'variable3' => array(
* '_exclude' => array('secretTitle'),
* '_descend' => array(
* 'customer' => array(
* '_only' => array('firstName', 'lastName')
* )
* )
* ),我以为variable3可以是一个数组,但事实并非如此。数组的符号如下所示:
'somearrayvalue' => array(
* '_descendAll' => array(
* '_only' => array('property1')
* )
* )所以最后我有了这样的配置
protected $configuration = [
'jobs' => [
'_descendAll' => [
'_exclude' => ['pid'],
'_descend' => [
'place' => [
'_only' => ['name']
]
]
]
],
];https://stackoverflow.com/questions/36018222
复制相似问题