我正在尝试创建一个对象,但值不会存储到数据库中.这是在"索引" - 动作上完成的,因为插件是通过TypoScript插入的,实际上并不创建输出.所以在调用动作时没有给出任何对象,这就是我自己创建它的原因.
$stat = new Tx_MyExt_Domain_Model_Stat;
$stat->setSubscriberId($_COOKIE['statid']);
$stat->setDomain($_SERVER['HTTP_HOST']);
$stat->setRequestUri($_SERVER['REQUEST_URI']);
$this->statRepository = t3lib_div::makeInstance('Tx_myExt_Domain_Repository_StatRepository');
$this->statRepository->add($stat);
Run Code Online (Sandbox Code Playgroud)
做一个var_dump($stat)给出以下内容:
object(Tx_MyExt_Domain_Model_Stat)#191 (9) {
["subscriber_id":protected]=>
string(1) "2"
["domain":protected]=>
string(22) "test.localhost.example"
["request_uri":protected]=>
string(26) "/testpage/index.php?id=2"
["uid":protected]=>
NULL
["_localizedUid":protected]=>
NULL
["_languageUid":protected]=>
NULL
["pid":protected]=>
NULL
["_isClone":"Tx_Extbase_DomainObject_AbstractDomainObject":private]=>
bool(false)
["_cleanProperties":"Tx_Extbase_DomainObject_AbstractDomainObject":private]=>
NULL
}
Run Code Online (Sandbox Code Playgroud)
所以这看起来正确分配了值.但是在查看数据库时,我得到了这个:
uid pid subscriber_id domain request_uri crdate
13 0 0 NULL NULL 1328176026
Run Code Online (Sandbox Code Playgroud)
库:
class Tx_MyExt_Domain_Repository_StatRepository extends Tx_Extbase_Persistence_Repository
{}
Run Code Online (Sandbox Code Playgroud)
模型:
class Tx_MyExt_Domain_Model_Stat extends Tx_Extbase_DomainObject_AbstractEntity
{
/**
* @var int
* @dontvalidate
*/
protected $subscriber_id = 0;
/**
* …Run Code Online (Sandbox Code Playgroud) 我有一个模型,其中一个字段是日期。我想显示该模型中的元素,按年和月分组,如下所示:
== 2013 ==
=== April ===
* Element 1
* Element 2
=== March ===
* Element 3
...
== 2012 ==
...
Run Code Online (Sandbox Code Playgroud)
如果实现这一目标的最佳方式呢?我应该直接在控制器中构建嵌套数组吗?或者有没有办法只使用 Fluid 模板显示年和月的标题?或者我应该编写一个自定义的 ViewHelper 来提取和显示年和月的标题?
我正在构建一个扩展,创建一个后端模块,使be_users能够调整图像大小.我正在尝试使用pageRenderer添加/包含css和javascript文件但是文件永远不会被包含我只能在使用样式标记直接添加到流体模板中时应用css并包含带有脚本标记的javascript文件.
我在控制器中试过这样的东西
protected $pageRenderer;
....
$this->pageRenderer = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Page\\PageRenderer');
$this->pageRenderer->addCssFile('/typo3conf/ext/extKey/Resources/Public/css/styles.css');
$this->pageRenderer->loadJquery();
Run Code Online (Sandbox Code Playgroud)
还尝试了一个viewHelper
namespace Vendor\ExtKey\ViewHelpers;
class AddJsFileViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Be\AbstractBackendViewHelper {
public function render() {
$doc = $this->getDocInstance();
$pageRenderer = $doc->getPageRenderer();
$pageRenderer->loadJquery();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的心中
{namespace pager=Vendor\ExtKey\ViewHelpers}
<f:layout name="Default" />
<f:section name="main">
<pager:addJsFile />
Run Code Online (Sandbox Code Playgroud)
...
依然没有
标题听起来有点学术化实际上非常简单:我已经设置了一个TYPO3 6.1 extbase扩展,我已配备了调度程序任务.该任务应该导入CSV文件并将其保存到扩展的数据库字段中.
但是,如何告诉调度程序任务使用扩展模型等并将接收到的数据保存到持久层?
我已经看到了类似问题的答案:在调度程序任务中执行存储库函数,我认为它指向正确的方式,但我认为需要一个完整的示例来开始理解依赖注入的工作原理.
我的Extbase扩展中有一个服务类,并希望使用ObjectManager在构造函数中创建一个对象的实例.
/**
* @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
* @inject
*/
protected $objectManager;
public function __construct() {
$this->standaloneView = $this->objectManager->get('TYPO3\CMS\Fluid\View\StandaloneView');
$this->standaloneView->setFormat('html');
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不会Call to a member function get() on null因为错误而失败,因为注入的类似乎在构造函数中不可用.如何在构造函数中使用注入的类?
我们有一个扩展使用2015年的数据。2016年将有相同的游戏,没有结构变化。在扩展中,我希望有一个开关来更改数据库 extbase 从中获取数据。
任何输入如何实现这一目标?
谢谢你。
我想为创建表单构建一个预览页面。我将记录的“已删除”属性设置为“1”,previewAction因为在 BE 中,列表模块用于批准插入的记录 - 因此,如果记录从未最终保存,则无论如何都将其删除。
问题:我可以创建记录 ( deleted=1) - 我可以跳回表单(没有历史记录,因为我必须保留创建的对象)。但是如果我再次提交属性映射告诉我
未找到身份为“3”的 MyModel 类型对象。
那当然是因为它被删除了。存储库中要忽略已删除的设置在此处不执行操作。
是的,我可以通过手动填充所有内容来绕过 Extbase 魔法,但这不是我想要的。
这是了解我正在尝试的操作的操作
/**
* action preview
*
* @param MyModel
* @return void
*/
public function previewAction(MyModel $newModel)
{
//check if model was already saved
$uid = $this->request->hasArgument('uid') ? this->request->getArgument('uid') : 0;
if($uid){
$newModel = $this->myRepository->findDeletedByUid($uid);
$this->myRepository->update($newModel);
}
else{
$newModel->setDeleted(true);
$this->myRepository->add($newModel);
}
$this->view->assign('ad', $newModel);
$this->persistenceManager->persistAll();
$uid = $this->persistenceManager->getIdentifierByObject($newModel);
$this->view->assign('uid', $uid);
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
这是我的控制器动作:
public function jsonAction()
{
$this->view->setVariablesToRender(array('produkte'));
$this->view->setConfiguration(
array(
'produkte' => array(
'_descendAll' => array(
'only' => array('titel', 'beschreibung', 'bild', 'download', 'categories'),
'_descend' => array(
'bild' => array(),
'download' => array(),
'categories' => array(),
)
)
)
)
);
$this->view->assign('produkte', $this->produktRepository->findAll());
}
Run Code Online (Sandbox Code Playgroud)
我得到了一个非常不错的JSON-String。不幸的是,我仅获得包含文件(FAL)的PID和UID。如何获取完整对象或至少包含文件的路径?
/**
* Returns the bild
*
* @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $bild
*/
public function getBild()
{
return $this->bild;
}
/**
* Returns the download
*
* @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $download
*/
public function getDownload()
{
return $this->download;
}
Run Code Online (Sandbox Code Playgroud) 我需要在我的站点中配置一个新闻类别菜单。我在一个列中列出所有新闻,同一页面中的另一列显示类别菜单。新闻列表和类别菜单是使用插件而不是 TypoScript 配置的。同一页面包含另一个用于其他目的的新闻列表。问题是新闻没有按类别过滤。
对于我基于 extbase 的 TYPO3 CMS 扩展,我创建了一个 ApiController,以 JsonView 作为视图对象。返回值就像一个魅力,Content-type: application/json设置了正确的标题。
要返回其他响应,例如缺少授权消息或验证错误,我目前使用:
$data = ["errors" => [
"status" => 401,
"message" => "Missing access token"
]];
$this->throwStatus($status, null, json_encode($data));
Run Code Online (Sandbox Code Playgroud)
当我使用$this->throwStatus()标题时 Content-type: text/html设置。即使我header("Content-type: application/json");在使用$this->throwStatus().
如何使用正确的内容类型标头创建响应?
extbase ×10
typo3 ×9
fluid ×2
php ×2
typo3-7.6.x ×2
controller ×1
json ×1
tx-news ×1
typo3-6.1.x ×1
typo3-7.x ×1
typoscript ×1