标签: extbase

如何将AJAX参数传递给extbase操作?

现在我设法从数据库中获取值,我想指定更多我想要传递的内容.

从对下面的事件函数作出反应的选择框中,我想读出一个值(记录的uid)并将其传递给我的ajaxAction:


    
    var uid;
    $('#mySelectBox').change(function() {
        arguments = $(this).attr('value');
        var uri = '<f:uri.action arguments="{uid: '+uid+'}" action="ajax" controller="Mycontroller1" pageType="89657201" />';

        jQuery.getJSON(uri, function(result) {
            // do something
        });
    });
    

我用参数试了一下,不知道这是不是正确的方法.另外,正如Marcus Biesioroff建议的那样,我应该将我的JS保存到一个单独的文件中,但是我必须自己编写uri而不是Fluid方式,对吧?

我的ajaxAction看起来像这样:


    
        public function ajaxAction($uid) {
            $dataFromRepo = $this->myRepository->findByUid($uid);

            $resultArray = array(
                "field1" => $dataFromRepo->getField1(),
                "field2" => $dataFromRepo->getField2(),
                "field3" => $dataFromRepo->getField3(),
                "field4" => $dataFromRepo->getField4(),
            );
            return json_encode($resultArray);
        }
    

我确信uid没有正确传递,其他一切都有效.

ajax action param typo3 extbase

5
推荐指数
1
解决办法
6479
查看次数

复制extbase存储库对象

在我的extbase/fluid项目中,除了标准操作,如创建,删除,列表等,我想创建一个存储在存储库中的模型类对象的副本.使用findall(),所有对象都显示在列表中,并且每个对象旁边都会显示相应的操作,如删除,编辑.为了复制一个对象,我在相应的控制器中创建了一个重复的动作,这里是代码:

public function dupcliateAction(Tx_CcCompanylogin_Domain_Model_MyObject $testObject)
{
 $this->myObjectRepository->add($testObject);
 $this->redirect('list');//Lists the objects again from the repository
}
Run Code Online (Sandbox Code Playgroud)

看起来很不稳定,但没有新的对象添加到存储库,我没有收到错误.我检查了文档,没有明确的方法可用于复制.

extbase

5
推荐指数
1
解决办法
2676
查看次数

从TYPO3 6.1中的Extbase映射到"pages"表

我用域模型创建了一个扩展Message.该模型与TYPO3 pages(具有页面的详细信息,如title,issite_root等)表有一个关系m:n .但是,通过使用该mapping to existing tables选项,它给出了type错误说页面:

The configured type field for table "pages" is of type int(11) unsigned
This means the type field can not be used for defining the record type. 
You have to configure the mappings yourself if you want to map to this
table or extend the correlated class
Run Code Online (Sandbox Code Playgroud)

所以我只是创建没有映射的关系,以便我以后可以映射它setup.txt.

在此输入图像描述

PagesMyExt/Classes/Domain/Model/所有getter/setter和repository中创建了模型MyExt/Classes/Domain/Repository/.

在我的setup.txt中,我这样做了:

config.tx_extbase {
    persistence{
        enableAutomaticCacheClearing = 1
        updateReferenceIndex = 0
        classes …
Run Code Online (Sandbox Code Playgroud)

typo3 extbase

5
推荐指数
1
解决办法
8073
查看次数

"扩展"构建器中的"映射到现有表",显示TYPO3中的奇怪问题

在我的扩展中MyExt,我将模型映射PagepagesTYPO3中的表.首先它向我显示type mismatch错误,我无论如何都继续保存它.

发生以下事情:

  • 我的页面树变成这样:

在此输入图像描述

  • 我的新记录表只显示UID而不是标题:

在此输入图像描述

  • 我的页面编辑变成这样: 在此输入图像描述

在我,MyExt/Configuration/TypoScript/setup.txt我有这个:

config.tx_extbase.persistence.classes {
    Tx_MyExt_Domain_Model_Page {
        mapping {
            tableName = pages
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?或者我做错了什么?

这是我的/Domain/Model/Page.php,只是一瞥.

class Page extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
{

    /**
     * uid
     * @var int
     * @validate NotEmpty
     */
    protected $uid;

    /**
     * title
     * @var string
     * @validate NotEmpty
     */
    protected $title;

    /**
     * __construct
     *
     * @return Page
     */
    public function __construct() {
        //Do not remove the next line: …
Run Code Online (Sandbox Code Playgroud)

php typo3 extbase

5
推荐指数
1
解决办法
1868
查看次数

TYPO3 /如何从现有的表fe_users创建存储库?

我正在使用Extbase和Fluid创建一个特殊的BE模块,我需要一个代表标准FE用户的域对象.当我创建名为Feuser的新域对象并保存它时,扩展构建器会创建特殊的存储库,并且还希望在数据库中创建特殊的表tx_myextkey_feuser.但是这个表已经存在为fe_users.

有可能告诉typo3 Feuser对象的存储库已经存在(作为fe_users表),而typo3应该使用现有的存储库吗?我怎样才能做到这一点?

我需要它,因为扩展(包括这个BE模块)需要在同一个地方(这个BE模块)拥有每个逻辑和控件.

一般来说,如果可能的话,我需要为两个地方的新FE用户提供相同的插入对话框.如果没有,我可以创建自己的新建/编辑/显示操作,但我需要告诉TYPO3它应该使用FE用户的现有存储库.

我正在使用拼写错误4.7.3.

typo3 backend repository extbase

5
推荐指数
2
解决办法
6386
查看次数

如何将工具提示添加到Flexform插件配置?

一旦你知道它,我想它很简单,但我现在正在搜索这个主题超过4个小时.所以也许有人可以帮助我,推动正确的方向.

我用Extbase为TYPO3 6.2开发了一个扩展.插件配置使用FlexForm完成.为了增加Usabillity,我想在我的FlexForm中添加工具提示(helptexts或CSH).

方法1: 我用标签试了一下

<cshFile>
Run Code Online (Sandbox Code Playgroud)

并将相应的XML添加到扩展文件.正如许多论坛和博客所暗示的那样,这已被弃用,所以我试着尝试其他方法.

方法2: 在ext_tables.php中的"插件"中添加"locallang_csh_flexforms.xml".这似乎更逻辑,也建议作为新的方式来做到这一点.此方法也以某种方式被tx_news扩展使用,它总体上具有可靠的代码.

然而,这对我来说似乎不起作用,我试图替换所有已弃用的类(由tx_news使用)并将Implementation克隆到我的插件中.显示了FlexForm,但仍然没有可用的工具提示.我现在将发布我当前状态的一些代码片段.它试图在"tx_news"中完成所做的事情.

这些是我主要使用的文件,如果我没有忘记任何.如果有其他感兴趣,请告诉我,我会添加它.

tx_news中的功能 在此输入图像描述

ext_tables.php

if (!defined('TYPO3_MODE')) {
    die ('Access denied.');
}
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr(
    'tt_content.pi_flexform.psc_disqus_sso_sso.list', 'EXT:' . $_EXTKEY . '/Resources    /Private/Language/locallang_csh_flexforms.xml');

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
    $_EXTKEY,
    'Sso',
    'Psc Disqus'
);

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile($_EXTKEY,     'Configuration/TypoScript', 'Psc Disqus SSO');

//flexforms
$extensionName = \TYPO3\CMS\Core\Utility    \GeneralUtility::underscoredToUpperCamelCase($_EXTKEY);
$pluginSignature = strtolower($extensionName) . '_sso';

$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_excludelist'][$pluginSignature] = 'layout,recursive,select_key,pages';
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] =     'pi_flexform';

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue($pluginSignature,     'FILE:EXT:'.$_EXTKEY.'/Configuration/FlexForms/SsoSession.xml');
Run Code Online (Sandbox Code Playgroud)

locallang_csh_flexforms.xml

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<T3locallang>
<meta type="array">
    <description>CSH for flexforms</description>
    <type>CSH</type>
    <fileId>EXT:psc_disqus_sso/locallang_csh_flexforms.xml</fileId>
    <labelContext type="array"></labelContext>
</meta>
<data type="array">
    <languageKey index="default" type="array">
        <label …
Run Code Online (Sandbox Code Playgroud)

typo3 extbase typo3-6.2.x

5
推荐指数
1
解决办法
2525
查看次数

删除sys_file_reference时删除文件

我正在编写一个扩展,允许在TYPO3实例的前端和后端上传文件.上载在两个视图中都有效,但如果管理员想要在列表视图的后端删除上载,则不会删除位于Web服务器硬盘上的"物理"文件,只会删除sys_file_reference记录.

是否有可能告诉tca,如果删除上传记录,还应删除相关文件?我也尝试使用以下代码实现一个插槽但没有任何反应:

ext_localconf.php:

\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\SignalSlot\\Dispatcher')->connect(
    'TYPO3\CMS\Extbase\Persistence\Generic\Backend',
    'afterRemoveObject',
    'Kmi\feupload\Slots\MyAfterRemoveObjectSlot',
    'myAfterRemoveObjectMethod'
);
Run Code Online (Sandbox Code Playgroud)

类/插槽/ MyAfterRemoveObjectSlot.php:

namespace Kmi\feupload\Slots;
class MyAfterRemoveObjectSlot {
    public function myAfterRemoveObjectMethod($object) {
    // do something
    \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($object);
    }
}
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题?会有很多上传,如果管理员删除了一个,关联的文件也应该删除...

预先感谢您的帮助 :)

typo3 extbase typo3-6.2.x

5
推荐指数
1
解决办法
1946
查看次数

在基于extbase的Typo3 4.7扩展中的PHP错误"无法重新声明类"

我已经使用extbase框架为Typo3 4.7创建了一个扩展(实际上,它是为Typo3 6.2创建的,但我试图向后移植它).我已经从核心删除了所有名称空间,并检查了TYPO3 - 调用另一个存储库.但是,我遇到的问题是调用前端插件会导致PHP错误PHP Fatal error: Cannot redeclare class [...]\\ProjectController in [...]/ProjectController.php on line 127(第127行是该类的右括号).在我的插件中,我没有任何require/ include除了"dynamicConfigFile".

有问题的控制器使用依赖注入,如下所示:

/**
 * projectRepository
 *
 * @var Tx_MyExtension_Domain_Repository_ProjectRepository
 * @inject
 */
protected $projectRepository = NULL;

/**
 * sfbRepository 
 *
 * @var Tx_myExtension_Domain_Repository_SFBRepository
 * @inject
 */
protected $sfbRepository = NULL;
Run Code Online (Sandbox Code Playgroud)

我正在运行PHP 5.5.14.如果我改变"Tx _..."的东西而不是使用命名空间,那么整个代码就可以在Typo3 6上运行.

到目前为止,我发现只有一个关于这个问题的网站(https://forum.typo3.org/index.php/t/203725/),它说使用依赖注入而不是t3lib_div::makeInstance修复它.但是,我已经在使用依赖注入.

此外,如果我print_r(get_declared_classes());在类的声明之前添加,它不会打印有问题的类,即它似乎没有被声明.

以前有人遇到过这样的问题吗?我还能做些什么来解决这个问题?

编辑:整个堆栈跟踪是

[Mon Apr 27 17:17:17 2015] [error] [client ] PHP Stack …
Run Code Online (Sandbox Code Playgroud)

php typo3 extbase

5
推荐指数
1
解决办法
1345
查看次数

TYPO3 Extbase:如何获取禁用相关的Object,没有原始的sql-query?

场景:

我有以下型号: 域的模型

ContactPerson与FrontendUser有关系,是关系的拥有方.现在我有以下问题:
我正在激活/停用任务中的FrontendUsers,基于活动的ContactPersons.禁用或删除FrontendUser时,contactPerson-> getFrontendUser()的结果为null,即使两个存储库都是ignoreEnableFields:

    /** @var Typo3QuerySettings $querySettings */
    $querySettings = $this->objectManager->get(Typo3QuerySettings::class);
    $querySettings->setIgnoreEnableFields(true);
    $querySettings->setRespectStoragePage(false);
    $this->frontendUserRepository->setDefaultQuerySettings($querySettings);

    $debugContactPerson = $this->contactPersonRepository->findOneByContactPersonIdAndIncludeDeletedAndHidden('634');
    $debugFrontendUser = $this->frontendUserRepository->findOneByUid(7);
    \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump(
        array(
            '$debugContactPerson' => $debugContactPerson,
            '$debugFrontendUser' => $debugFrontendUser,
        )
    );
Run Code Online (Sandbox Code Playgroud)

结果: DebugResult

Ps:$this->frontendUserRepository->findByUid(7);也不起作用,因为它没有使用查询,但persistenceManager->getObjectByIdentifier(...当然忽略了查询设置.

问题是,在我的实际代码中我不能使用findOneByUid(),因为我无法在contact_person的frontend_user字段中获取整数值(uid).

没有使用原始查询来获取contact_person-row的任何方法来解决这个问题?


我的(是原始查询)解决方案:

因为我不想编写自己的QueryFactory而且我不想在我的contactPerson中添加冗余字段,所以我现在用原始语句解决了它.也许它可以帮助有同样问题的人:

class FrontendUserRepository extends \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository
{
    /**
     * @param \Vendor\ExtKey\Domain\Model\ContactPerson $contactPerson
     * @return Object
     */
    public function findByContactPersonByRawQuery(ContactPerson $contactPerson){
        $query = $this->createQuery();

        $query->statement(
            "SELECT fe_users.* FROM fe_users" .
            " LEFT JOIN tx_extkey_domain_model_contactperson contact_person ON contact_person.frontend_user = fe_users.uid" .
            " …
Run Code Online (Sandbox Code Playgroud)

typo3 extbase

5
推荐指数
1
解决办法
1616
查看次数

TYPO3教程扩展,控制器不存在

我正在尝试使用TYPO3扩展,并正在按照教程进行操作以了解基础知识。

在后端,一切正常,但在前端,我得到一个错误:

糟糕,发生错误!代码:20170209104827c3b58d58-{“ exception”:带有消息“类Tx_Inventory_Controller_InventoryController的异常'ReflectionException'不存在”

我的文件与教程中的文件完全相同。我不知道是什么原因造成的。我以为我对名称空间犯了一些愚蠢的错误,但是它们似乎都是正确的。

控制器类可以在下面找到,位于typo3conf / ext / inventory / Classes / Controller /

<?php
   namespace \MyVendor\Inventory\Controller;
   use \TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
   use \TYPO3\CMS\Core\Utility\GeneralUtility;
   use \MyVendor\Inventory\Domain\Model\Repository\ProductRepository;

   class InventoryController extends ActionController {
        public function listAction() {
                $productRepository = GeneralUtility::makeInstance(ProductRepository::class)
                $products = $productRepository->findAll();
                $this->view->assign('products', $products);
        }
   }
?>
Run Code Online (Sandbox Code Playgroud)

typo3 extbase

5
推荐指数
2
解决办法
2741
查看次数

标签 统计

extbase ×10

typo3 ×9

php ×2

typo3-6.2.x ×2

action ×1

ajax ×1

backend ×1

param ×1

repository ×1