$_FILES、$_POST、$_SERVER 的具体 5 种方式
concrete5 way for $_FILES, $_POST, $_SERVER
concrete5 等同于什么
if (empty($_FILES) &&
empty($_POST) &&
isset($_SERVER['REQUEST_METHOD']) &&
strtolower($_SERVER['REQUEST_METHOD']) == 'post') {
请求方式?
[更新] 看起来这是可行的:
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;
如果您使用的不是控制器而是自定义 class,您可以将请求标记为 class 的依赖项:
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实例
$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 Request 扩展了 Symfony Request(版本 3.4),因此您可能想看看 https://symfony.com/doc/3.4/components/http_foundation.html#accessing-request-data
concrete5 等同于什么
if (empty($_FILES) &&
empty($_POST) &&
isset($_SERVER['REQUEST_METHOD']) &&
strtolower($_SERVER['REQUEST_METHOD']) == 'post') {
请求方式?
[更新] 看起来这是可行的:
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;
如果您使用的不是控制器而是自定义 class,您可以将请求标记为 class 的依赖项:
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实例$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 Request 扩展了 Symfony Request(版本 3.4),因此您可能想看看 https://symfony.com/doc/3.4/components/http_foundation.html#accessing-request-data