Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/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 在CLI上下文中使用Fluid StandaloneView(也称为FluidMail)_Typo3_Fluid_Typo3 10.x - Fatal编程技术网

Typo3 在CLI上下文中使用Fluid StandaloneView(也称为FluidMail)

Typo3 在CLI上下文中使用Fluid StandaloneView(也称为FluidMail),typo3,fluid,typo3-10.x,Typo3,Fluid,Typo3 10.x,StandaloneView(“如果要使用Fluid而不使用Extbase扩展,则应将其用作视图”)的名称和说明表明,可以在任何Extbase上下文之外的任何位置使用此视图。例如,对于CLI任务,例如生成电子邮件(FluidMail)或使用视图生成HTML代码,然后将其转换为PDF 不幸的是,如果模板引用了诸如图像或CSS/JS文件之类的资产,上述任何一项都不起作用 原因是,视图依赖于请求对象来派生到资产的域相对路径,这在CLI中显然不起作用,因为不存在适当的请求对象: TYPO3\CMS\Ex

StandaloneView
(“如果要使用Fluid而不使用Extbase扩展,则应将其用作视图”)的名称和说明表明,可以在任何Extbase上下文之外的任何位置使用此视图。例如,对于CLI任务,例如生成电子邮件(
FluidMail
)或使用视图生成HTML代码,然后将其转换为PDF

不幸的是,如果模板引用了诸如图像或CSS/JS文件之类的资产,上述任何一项都不起作用

原因是,视图依赖于请求对象来派生到资产的域相对路径,这在CLI中显然不起作用,因为不存在适当的请求对象:

TYPO3\CMS\Extbase\Mvc\Web\Request prototype object
   format => protected "html" (4 chars)
   pluginName => protected "" (0 chars)
   controllerExtensionName => protected NULL
   controllerSubpackageKey => protected NULL
   controllerObjectName => protected "" (0 chars)
   controllerName => protected "Standard" (8 chars)
   controllerActionName => protected "index" (5 chars)
   arguments => protected array(empty)
   internalArguments => protected array(empty)
   dispatched => protected FALSE
   originalRequest => protected NULL
   originalRequestMappingResults => protected NULL
   method => protected "GET" (3 chars)
   requestUri => protected "http:///var/www/html/vendor/bin/typo3cms" (40 chars)
   baseUri => protected "http:///va/typo3/" (17 chars)
   isCached => protected FALSE
视图帮助程序将创建错误的URI,如下所示:

// f:uri.resource(path:'Css/pdf.css', extensionName: 'myext')
<link href="typo3conf/ext/myext/Resources/Public/Css/pdf.css" rel="stylesheet" />

// f:image(src:'EXT:myext/Resources/Public/Images/logo.png')
<img src="/va/typo3conf/ext/myext/Resources/Public/Images/logo.png" />
//f:uri.resource(路径:'Css/pdf.Css',扩展名:'myext')
//f:image(src:'EXT:myext/Resources/Public/Images/logo.png')
中给出的解决方案没有帮助,因为已呈现/找到模板文件,但缺少链接的资源,这将完全破坏模板

这个问题的可能解决方案是什么?或者:如何正确使用
StandaloneView
?因为即使是核心
FluidMail
也有这个问题,这似乎是一个普遍的概念问题

感谢您的任何意见、想法或解决方案

PS:
在模板中嵌入任何资源都不是解决方案

对于有相同问题并寻求解决方案的人,我将总结一下我已经想到的以及朱利安证实的(谢谢)。如果有人提出更好的解决方案,请随意分享

解决方案1:避免链接应在CLI上下文中使用的模板中的资产,并将所有需要的资源嵌入模板中

解决方案2:用域伪造ServerRequest,以允许查看帮助人员确定喜欢的资产的正确路径

解决方案3:使用扩展的BaseUrl帮助函数

解决方案4:编写自定义ViewHelper(或更好地扩展常用的ViewHelper),这些ViewHelper不仅可以确定从请求对象到资产的路径,还可以确定从TYPO3实例路径(如果作为CLI运行)到资产的路径,这对于内部处理应该足够了


尽管如此,名称
StandaloneView
还是非常错误,因为在CLI上下文中使用它会遇到所有意外问题。

如果您不想嵌入资源,但希望它们显示在邮件中,电子邮件客户端应该从何处获取它们?您有两个选项:a)嵌入它们或b)从公共URI加载它们。第一个选项是您不想要的,第二个选项是,您必须告诉Fluid您想要绝对URI,以便可以从您的网站外部加载它们。我猜提到邮件会得到这个答案;-)确实,要加载链接源,它们必须通过公共URL可用,这仍然很困难,因为CLI没有域请求上下文。另一种情况——使用SingleView模板处理PDF——是纯内部的,链接到外部资源似乎又是一种解决办法。。。那么,用当前的实现是不可能的?!(除了引入像伪造ServerRequest之类的棘手黑客)CLI没有域请求上下文,对吗。由于缺少应使用哪个域的信息,TYPO3无法解决此问题。没有机会自动选择它。唯一的方法是在通过CLI调用时手动设置域,或者在扩展中的某个位置进行配置。如何生成PDF?类型3不能这样做。因此,也许这不是FluidStandaloneView缺少的功能,而是库中缺少的功能,您正在将生成的HTML传递给?感谢您的确认,我将了解如何解决此问题。我使用的是mpdf/mpdf库,它只接收一堆现成的HTML代码,只要Fluid ViewHelper能够确定路径,它就可以正常工作。意思是:只要我通过web请求触发PDF生成,PDF看起来应该是这样的,但是通过CLI,CSS/图像路径是错误的,如上所述,导致了一个简单的HTML默认样式混乱的PDF。