typo3 php 文件在 public 文件夹访问控制器功能

typo3 php file in public folder access controller function

是否可以从基于 resource/public/php/file.php

的 php 文件访问控制器功能

我想要的是这个 php 文件是特殊文件 我用它来做这个:

<img src="file.php"></img> 

我将禁用可读路径。所以这个 php 文件做了一些加密并且需要连接到正常的控制器功能。

谢谢

is there any posibillity to access a controller function from a php file that is based in resource/public/php/file.php

是的,这是可能的,但因此您还需要 bootstrap TYPO3 核心。或者,如果它是 staticpublic 方法,那么您可以直接调用它。

但在你的情况下这似乎不是正确的方法。

假设您正在处理某种验证码,您应该考虑使用自己的 page type 来呈现 dynamic images。这是一个工作示例:

TypoScript 设置

在 TypoScript 中,我们正在注册我们自己的 page typ 并将其指向我们的 extensioncontrolleraction:

DynamicCaptchaImage = PAGE
DynamicCaptchaImage {

    typeNum = 1234

    10 = USER_INT
    10 {
        userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
        pluginName = Pi1
        extensionName = MyExtName
        vendorName = MyCompanyName
        controller = MyExtbaseController
        action = renderCaptchaImage
        # view =< plugin.tx_myextname.view  // you provide the view yourself
        # persistence =< plugin.tx_myextname.persistence // in case you need a repository you should uncomment it
        settings =< plugin.tx_myextname.settings
    }

    config {
        disableAllHeaderCode = 1
        additionalHeaders = Content-Type: image/png
        xhtml_cleaning = 0
        admPanel = 0
        debug = 0
    }
}

另请参阅:Registering a custom typeNum-based Controller access

控制器

这是您的 controlleraction 的示例:

<?php
namespace MyCompanyName\MyExtName\Controller;

/**
 * MyExtbaseController
 */
class MyExtbaseController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {

    /**
     * Render Captcha Image Action
     *
     * @return void
     */
    public function renderCaptchaImageAction() {

        // Send some headers
        header('Content-Type: image/png');

        // < do your magic stuff here >

        // Breaks the script because we've sent already some headers and want
        // to prevent that TYPO3 is adding another stuff (eg. for debugging purposes)
        // that can break the image from loading.
        // return FALSE; does not stop doing that!
        exit;
    }

}

另请参阅:Extbase wiki

访问控制器

现在我们已经配置了自定义 page type 我们可以通过调用 TypoScript 设置中给出的 page type 来访问控制器。

例如。 http://www.example.com?type=1234指向MyExtbaseController中的renderCaptchaImageAction()

流体

在 Fluid 中,您可以 link 到您配置的 page type

<img src="{f:link.page(pageType: 1234)}" />

另请参阅:Fluid wiki

真实网址

如果您使用的是扩展程序 realurl,您可以通过以下方式将 ?type=1234 更改为 captcha.png

// [...]
'fileName' => array(
    'index' => array(
        'captcha.png' => array(
            'keyValues' => array(
                'type' => 1234,
            ),
        ),
    ),
),
// [...]

另请参阅:Realurl wiki