FluidTYPO3 fluidpages – 找不到自定义页面控制器
FluidTYPO3 fluidpages – custom page controller not found
我正在使用 TYPO3 9.5 和 Fluid Powered TYPO3 扩展构建一个网站,我需要在我的 fluidpages 模板中访问 GET 和 POST 变量。
我试图创建一个自定义 PageController 来执行此操作;这是我在 …myext/Classes/Controller/PageController.php
中添加的 class :
<?php
namespace MyVendor\MyExt\Controller;
use FluidTYPO3\Fluidpages\Controller;
class PageController extends Controller\PageController
{
protected function initializeViewVariables() {
parent::initializeViewVariables();
$GETarray = \TYPO3\CMS\Core\Utility\GeneralUtility::_GET();
$this->view->assign('GET', $GETarray);
}
}
不幸的是,这个方法好像一直没有执行,好像我的class没找到一样。当我在带有 <f:debug>{GET}</f:debug>
的模板文件中显示 GET
时,无论我在 URL 中添加什么参数,结果总是 NULL
。我尝试用 view->assign
分配另一个固定变量,它也是 NULL
。上面的代码没有语法错误,我使用的是 PHPStorm,它找到父 class 并显示我的 initializeViewVariables
方法覆盖了 AbstractFluxController
.
中的方法
我尝试过的:
- 我按照文档的说明进行操作 here:使用
MyVendorName.Myextensionkey
形式的密钥注册了我的扩展程序。我创建了一个 ClassAliasMap.php
文件,尽管我认为 TYPO3 9.5 不需要它?
- 在我扩展的
composer.json
文件中,我添加了:
"autoload": {
"psr-4": {
"MyVendor\MyExt\": "Classes"
}
}
在我的整个 TYPO3 项目的 composer.json
中,我输入:
"autoload": {
"psr-4": {
"MyVendor\MyExt\": "public/typo3conf/ext/myext/Classes"
}
}
在我使用 composer dump-autoload
命令后,我已验证此路径出现在 vendor/composer/autoload_psr4.php
中。我在 ext_emconf.php
文件 中也有自动加载信息
- 清除了 TYPO3 中的所有缓存
- 当我查看页面时,在 TYPO3 或 Apache 日志中都没有任何错误消息
而且还是不行。但是,如果我在带有 userFunc
的页面的 Typoscript 中调用 class 的方法,自动加载就会起作用。你看到我错过了什么了吗?
暂时回答我自己的问题(希望以后能补充更多细节):为了让上面的控制器在某个页面被调用,我们需要添加一个动作,即使是一个空动作,与模板同名。例如,如果我们的页面模板是 Foo.html
,如果我们添加一个操作方法,它将起作用:
public function fooAction() {
}
到PageController
class
我正在使用 TYPO3 9.5 和 Fluid Powered TYPO3 扩展构建一个网站,我需要在我的 fluidpages 模板中访问 GET 和 POST 变量。
我试图创建一个自定义 PageController 来执行此操作;这是我在 …myext/Classes/Controller/PageController.php
中添加的 class :
<?php
namespace MyVendor\MyExt\Controller;
use FluidTYPO3\Fluidpages\Controller;
class PageController extends Controller\PageController
{
protected function initializeViewVariables() {
parent::initializeViewVariables();
$GETarray = \TYPO3\CMS\Core\Utility\GeneralUtility::_GET();
$this->view->assign('GET', $GETarray);
}
}
不幸的是,这个方法好像一直没有执行,好像我的class没找到一样。当我在带有 <f:debug>{GET}</f:debug>
的模板文件中显示 GET
时,无论我在 URL 中添加什么参数,结果总是 NULL
。我尝试用 view->assign
分配另一个固定变量,它也是 NULL
。上面的代码没有语法错误,我使用的是 PHPStorm,它找到父 class 并显示我的 initializeViewVariables
方法覆盖了 AbstractFluxController
.
我尝试过的:
- 我按照文档的说明进行操作 here:使用
MyVendorName.Myextensionkey
形式的密钥注册了我的扩展程序。我创建了一个ClassAliasMap.php
文件,尽管我认为 TYPO3 9.5 不需要它? - 在我扩展的
composer.json
文件中,我添加了:
在我的整个 TYPO3 项目的"autoload": { "psr-4": { "MyVendor\MyExt\": "Classes" } }
composer.json
中,我输入:
在我使用"autoload": { "psr-4": { "MyVendor\MyExt\": "public/typo3conf/ext/myext/Classes" } }
composer dump-autoload
命令后,我已验证此路径出现在vendor/composer/autoload_psr4.php
中。我在ext_emconf.php
文件 中也有自动加载信息
- 清除了 TYPO3 中的所有缓存
- 当我查看页面时,在 TYPO3 或 Apache 日志中都没有任何错误消息
而且还是不行。但是,如果我在带有 userFunc
的页面的 Typoscript 中调用 class 的方法,自动加载就会起作用。你看到我错过了什么了吗?
暂时回答我自己的问题(希望以后能补充更多细节):为了让上面的控制器在某个页面被调用,我们需要添加一个动作,即使是一个空动作,与模板同名。例如,如果我们的页面模板是 Foo.html
,如果我们添加一个操作方法,它将起作用:
public function fooAction() {
}
到PageController
class