首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Extbase无法识别自定义JsonView

Extbase无法识别自定义JsonView
EN

Stack Overflow用户
提问于 2016-03-16 01:32:13
回答 1查看 563关注 0票数 2

我使用的是typo3 7.6。我不能让extbase接受我的自定义JsonView,它似乎不能识别它。

我覆盖了默认的JsonView,如下所示:

代码语言:javascript
复制
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的身份得到这个输出:

代码语言:javascript
复制
[{"description":"Owns products","pensum":100,"pid":55,"test":"Product","title":"Product Owner","uid":1}]

其一,pid仍然在那里,即使它在排除字段中,并且位置不被输出。似乎extbase忽略了我的覆盖,但我不知道为什么,也没有抛出任何错误。我把我的自定义类放到了JsonView /View/JsonView.php中

我的模型是:

工作

代码语言:javascript
复制
/**
* 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

}

地点

代码语言:javascript
复制
/**
* 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

}

控制器

代码语言:javascript
复制
/**
* 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'));
}
}    
EN

回答 1

Stack Overflow用户

发布于 2016-03-17 21:19:46

我找到了答案,有两个错误,一个是我的错,另一个在我看来像是糟糕的文档。我仍然在控制器中使用默认的Jsonview,所以我需要

代码语言:javascript
复制
protected $defaultViewObjectName = \Vendor\Jobs\View\JsonView::class;

而不是

代码语言:javascript
复制
protected $defaultViewObjectName = \TYPO3\CMS\Extbase\Mvc\View\JsonView::class;

第二个问题是我有问题的Jsonview配置。在docu中,它显示为

代码语言:javascript
复制
'variable3' => array(
 *          '_exclude' => array('secretTitle'),
 *          '_descend' => array(
 *              'customer' => array(
 *                  '_only' => array('firstName', 'lastName')
 *              )
 *          )
 *      ),

我以为variable3可以是一个数组,但事实并非如此。数组的符号如下所示:

代码语言:javascript
复制
'somearrayvalue' => array(
 *          '_descendAll' => array(
 *              '_only' => array('property1')
 *          )
 *      )

所以最后我有了这样的配置

代码语言:javascript
复制
protected $configuration = [
    'jobs' => [
        '_descendAll' => [
            '_exclude' => ['pid'],
            '_descend' => [
                'place' => [
                    '_only' => ['name']
                ]
            ]
        ]
    ],
];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36018222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档