Extbase无法识别自定义JsonView

时间:2016-03-15 17:32:13

标签: php json extbase typo3-7.6.x

我正在使用typo3 7.6。 我不能让我的自定义JsonView使用extbase,它似乎无法识别它。

我像这样覆盖默认的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放入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'));
}
}    

1 个答案:

答案 0 :(得分:0)

我找到了答案,有两个错误,一个是我的错,另一个在我看来像是糟糕的文档。 我仍然在我的控制器中使用默认的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')
 *              )
 *          )
 *      ),

我认为变量3可能是一个数组,但事实并非如此。数组的表示法是这样的:

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

所以最后我有了这个配置

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