$ _FILES,$ _ POST,$ _ SERVER的Concrete5方法

问题描述

具体相当于什么

if (empty($_FILES) && 
    empty($_POST) && 
    isset($_SERVER['REQUEST_METHOD']) && 
    strtolower($_SERVER['REQUEST_METHOD']) == 'post') {

以请求方式?

[UPDATE]看起来正在工作:

if (empty($this->request->files->all()) && 
    empty($this->request->request->all()) && 
    null !== $this->request->server->get('REQUEST_METHOD') && 
    strtolower($this->request->server->get('REQUEST_METHOD')) == 'post') {

解决方法

您应该获得当前的Request实例。 在控制器方法中,就像编写一样简单

$request = $this->request;

如果您不是使用控制器而是自定义类,则可以将请求标记为您的类的依赖项:

use Concrete\Core\Http\Request;

class YourClass
{
    /**
     * @var \Concrete\Core\Http\Request
     */
    private $request;

    public function __construct(Request $request)
    {
        $this->request = $request;
    }

    public function TheMethodWhereYouNeedRequest()
    {
        $request = $this->request;
        // ...
    }
}

您还可以通过编写获取请求实例

$request = \Core::make(\Concrete\Core\Http\Request::class);

拥有Request实例后,您可以编写:

if (
    // Same as empty($_FILES)
    $this->request->files->count() === 0
    &&
    // Same as empty($_POST)
    $this->request->request->count() === 0
    &&
    // Same as isset($_SERVER['REQUEST_METHOD']) && strtolower($_SERVER['REQUEST_METHOD']) == 'post'
    $this->request->getMethod() === 'POST'
) {
    ...
}

请注意,concrete5请求扩展了Symfony请求(版本3.4),因此您可能需要看看https://symfony.com/doc/3.4/components/http_foundation.html#accessing-request-data