Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typo3 类型3:读取tt_地址,并在自己的extbase扩展中使用流体按sys_类别进行排序打印_Typo3_Relation_Fluid_Extbase - Fatal编程技术网

Typo3 类型3:读取tt_地址,并在自己的extbase扩展中使用流体按sys_类别进行排序打印

Typo3 类型3:读取tt_地址,并在自己的extbase扩展中使用流体按sys_类别进行排序打印,typo3,relation,fluid,extbase,Typo3,Relation,Fluid,Extbase,我想阅读tt_地址的内容,并在我自己的extbase/fluid扩展中按sys_分类打印它们 我用打字脚本映射了这两个表,为它们创建了模型、控制器和存储库,因此我能够完整地打印这两个表,而不会出现问题 但是,我只需要打印与某个类别匹配的地址(取决于页面),但我无法让它工作 根据一些研究,应该可以加载它们并在流体模板中访问它们,如 <f:for each="{cats}" as="cat"> <f:for each="{cat.items}" as="adr"

我想阅读tt_地址的内容,并在我自己的extbase/fluid扩展中按sys_分类打印它们

我用打字脚本映射了这两个表,为它们创建了模型、控制器和存储库,因此我能够完整地打印这两个表,而不会出现问题

但是,我只需要打印与某个类别匹配的地址(取决于页面),但我无法让它工作

根据一些研究,应该可以加载它们并在流体模板中访问它们,如

    <f:for each="{cats}" as="cat">
      <f:for each="{cat.items}" as="adr">{adr}</f:for>
    </f:for>

{adr}
但是如果我通过debug选项显示它们,cat阵列上就没有地址了——难怪不显示地址

我为这两个表创建了TCAs,其中只包含与M:M相关的列定义(tt_地址的类别和sys_类别的项目),并在模型中包括以下内容:

    /**
     * Addresses
     *
     * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Myext\Domain\Model\Address>
     */
     protected $addresses;

     /**
      * Adds a Address
      *
      * @param \Vendor\Myext\Domain\Model\Address $address
      * @return void
      */
      public function addAddress(\Vendor\Myext\Address\Domain\Model\Address $address) {
       $this->addresses->attach($address);
      }

    /**
     * Removes a Address
     *
     * @param \Vendor\Myext\Domain\Model\Address $addressToRemove The Address to be removed
     * @return void
     */
     public function removeAddress(\Vendor\Myext\Domain\Model\Address $addressToRemove) {
      $this->addresses->detach($addressToRemove);
     }

    /**
     * Returns the Addresses
     *
     * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Myext\Domain\Model\Address> $addresses
     */
     public function getAddresses() {
      return $this->addresses;
     }

    /**
     * Sets the Addresses
     *
     * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Myext\Domain\Model\Address> $addresses
     * @return void
     */
     public function setAddresses(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $addresses) {
      $this->addresses = $addresses;
     }
/**
*地址
*
*@var\TYPO3\CMS\Extbase\Persistence\ObjectStorage
*/
受保护的$地址;
/**
*添加地址
*
*@param\Vendor\Myext\Domain\Model\Address$Address
*@返回无效
*/
公共函数addAddress(\Vendor\Myext\Address\Domain\Model\Address$Address){
$this->address->attach($address);
}
/**
*删除地址
*
*@param\Vendor\Myext\Domain\Model\Address$Address删除要删除的地址
*@返回无效
*/
公共函数removeAddress(\Vendor\Myext\Domain\Model\Address$addressToRemove){
$this->addresses->detach($addressToRemove);
}
/**
*返回地址
*
*@return\TYPO3\CMS\Extbase\Persistence\ObjectStorage$地址
*/
公共函数getAddresses(){
返回$this->addresses;
}
/**
*设置地址
*
*@param\TYPO3\CMS\Extbase\Persistence\ObjectStorage$地址
*@返回无效
*/
公共函数集合地址(\TYPO3\CMS\Extbase\Persistence\ObjectStorage$地址){
$this->addresses=$addresses;
}
当然,在地址模型中,情况正好相反

哪里有错,我错过了什么?甚至可以在映射表上使用M:M关系吗?我需要完整的TCA吗

请帮帮我,我从一个星期以来一直在拼命尝试。每一个答案都将不胜感激

提前谢谢


PS:我当然想使用“sys\u category\u record\u mm”-关系表。

您是否使用
makeCategorizable()将类别添加到tt\u地址表中

这将在tt_地址上为您添加正确的TCA,因此您不必担心MM raltaions。 然后,您还可以根据某些参数获取所有需要的记录。在您的情况下,是页面的类别。您还可以创建类别集合以推送到视图中


这里有详细的说明:

非常感谢您-它现在可以工作了!:-)对于遇到类似情况的所有其他人:不需要映射categories表或mm表,不需要为它们创建模型、存储库或控制器,也不需要编写任何TCA。只需在ext_tables.php中调用“makeCategorizable()”,并为模型中的类别创建一个包含getter和setter的成员变量——仅此而已!我也想使用类别,但我有一个问题。添加了
makeCategorizable()
,为我的模型添加了sql列,但当我添加
受保护的$categories时
使用我的模型的seter和geter,我在前端得到一个异常,即使我没有访问它<代码>#1297759968:在属性路径“”处进行属性映射时出现异常:PHP警告:class_parents():对象或字符串应位于…/typo3/sysext/extbase/Classes/Persistence/Generic/Mapper中/‌​DataMapper.php第283行
。我做错了什么?完成了