У меня есть форма во внешнем интерфейсе, которая создает объект модели Question
. Каждому вопросу должен быть присвоен один Category
, который выбирается в форме (через <f:form.select>
), а затем отправляется следующим образом:
tx_qa_questionform[question][category] = 1
, в основном отправляя UID Category
. После отправки формы я получаю исключение:
#1297759968 TYPO3\CMS\Extbase\Property\Exception
Exception while property mapping at property path "category": Could not find a suitable type converter for "Category" because no such class or interface exists.
Так что, похоже, PropertyMapper
не может идентифицировать домен Category
, хотя он определен в расширении. Разве это не должно произойти само по себе? Или есть какая-то конфигурация, которую я пропустил, чтобы настроить?
Model/Question.php
namespace Vendor\QA\Domain\Model;
class Question extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
/**
* @var Category $category
*/
protected $category;
/**
* @var string $name
*/
protected $name = '';
/**
* @var string $mail
*/
protected $mail = '';
/**
* @var string $content
*/
protected $content = '';
public function __construct(Category $category, string $name, string $mail, string $content) {
$this->setCategory($category);
$this->setName($name);
$this->setMail($mail);
$this->setContent($content);
}
public function setCategory(Category $category): void {
$this->category = $category;
}
public function getCategory(): Category {
return $this->category;
}
public function setName(string $name): void {
$this->name = $name;
}
public function getName(): string {
return $this->name;
}
public function setMail(string $mail): void {
$this->mail = $mail;
}
public function getMail(): string {
return $this->mail;
}
public function setContent(string $content): void {
$this->content = $content;
}
public function getContent(): string {
return $this->content;
}
}
Model/Category.php
namespace Vendor\QA\Domain\Model;
class Category extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
/**
* @var string $name
*/
protected $name;
public function __construct(string $name) {
$this->setName($name);
}
public function setName(string $name): void {
$this->name = $name;
}
public function getName(): string {
return $this->name;
}
}
Controller/FrontendController.php
namespace Vendor\QA\Controller;
use Vendor\QA\Domain\Model\Question;
use Vendor\QA\Domain\Repository\QuestionRepository;
use Vendor\QA\Domain\Repository\CategoryRepository;
class FrontendController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
private $questionRepository;
private $categoryRepository;
public function injectQuestionRepository(QuestionRepository $questionRepository) {
$this->questionRepository = $questionRepository;
}
public function injectCategoryRepository(CategoryRepository $categoryRepository) {
$this->categoryRepository = $categoryRepository;
}
public function formAction() {
$categories = $this->categoryRepository->findAll();
$this->view->assign('categories', $categories);
$this->view->assign('newQuestion', null);
}
public function createQuestionAction(Question $question) {
$this->questionRepository->add($question);
}
}