如果我在后端中设置类别,则我可以将我的其中一个模型的表格分类为正常工作。如果我尝试通过前端表单添加类别,那么我总是会遇到错误Call to a member function attach() on null
并且不知道为什么会这样。也许任何人都可以帮忙。
在控制器中,我尝试照常添加,找到类别
$videoCat = $this->categoryRepository->findByUid(28);
并像这样添加它
$this->video->addTxVideoCat($videoCat);
那是发生错误的地方。 在下面找到我如何将类别添加到模型中。
-
ext_tables.sql tx_video_cat int(11) DEFAULT '0' NOT NULL,
在TCA / Overrides / sys_template.php中扩展了tca
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::makeCategorizable(
'addvideo',
'tx_addvideo_domain_model_video',
// Do not use the default field name ("categories") for pages, tt_content, sys_file_metadata, which is already used
'tx_video_cat',
array(
// Set a custom label
'label' => 'LLL:EXT:addvideo/Resources/Private/Language/locallang.xlf:video_categories',
// This field should not be an exclude-field
'exclude' => FALSE,
// Override generic configuration, e.g. sort by title rather than by sorting
// string (keyword), see TCA reference for details
'l10n_mode' => 'exclude',
// list of keywords, see TCA reference for details
'l10n_display' => 'hideDiff',
)
);
创建的扩展类别存储库
namespace Pixelink\Addvideo\Domain\Repository;
class CategoryRepository extends \TYPO3\CMS\Extbase\Domain\Repository\CategoryRepository
创建扩展模型
namespace Pixelink\Addvideo\Domain\Model;
class Category extends \TYPO3\CMS\Extbase\Domain\Model\Category
{}
打字稿中的类别映射
plugin.tx_addvideo{
persistence {
classes{
Pixelink\Addvideo\Domain\Model\Category {
mapping {
tableName = sys_category
columns {
}
}
}
}
}
}
在Model \ Video.php中,我添加了以下内容
/**
* txVideoCat
*
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Pixelink\Addvideo\Domain\Model\Category>
*/
protected $txVideoCat = null;
/**
* Get categories
*
* @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Pixelink\Addvideo\Domain\Model\Category>
*/
public function getTxVideoCat()
{
return $this->txVideoCat;
}
/**
* Set categories
*
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $txVideoCat
*/
public function setTxVideoCat($txVideoCat)
{
$this->txVideoCat = $txVideoCat;
}
/**
* Add category to a post
*
* @param \Pixelink\Addvideo\Domain\Model\Category $txVideoCat
*/
public function addTxVideoCat(\Pixelink\Addvideo\Domain\Model\Category $txVideoCat)
{
$this->txVideoCat->attach($txVideoCat);
}
答案 0 :(得分:2)
您应该在Video
模型构造函数中初始化属性:
public function __construct()
{
$this->txVideoCat = new ObjectStorage();
}
答案 1 :(得分:0)
您的$this->txVideoCat
是null
。使用initiailizeObject()
方法进行分配:
public function initializeObject()
{
$this->txVideoCat = new ObjectStorage();
}