376 lines
8.4 KiB
PHP
376 lines
8.4 KiB
PHP
<?php
|
|
|
|
namespace Illuminate\Http\Concerns;
|
|
|
|
use stdClass;
|
|
use SplFileInfo;
|
|
use Illuminate\Support\Arr;
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\Http\UploadedFile;
|
|
|
|
trait InteractsWithInput
|
|
{
|
|
/**
|
|
* Retrieve a server variable from the request.
|
|
*
|
|
* @param string $key
|
|
* @param string|array|null $default
|
|
* @return string|array
|
|
*/
|
|
public function server($key = null, $default = null)
|
|
{
|
|
return $this->retrieveItem('server', $key, $default);
|
|
}
|
|
|
|
/**
|
|
* Determine if a header is set on the request.
|
|
*
|
|
* @param string $key
|
|
* @return bool
|
|
*/
|
|
public function hasHeader($key)
|
|
{
|
|
return ! is_null($this->header($key));
|
|
}
|
|
|
|
/**
|
|
* Retrieve a header from the request.
|
|
*
|
|
* @param string $key
|
|
* @param string|array|null $default
|
|
* @return string|array
|
|
*/
|
|
public function header($key = null, $default = null)
|
|
{
|
|
return $this->retrieveItem('headers', $key, $default);
|
|
}
|
|
|
|
/**
|
|
* Get the bearer token from the request headers.
|
|
*
|
|
* @return string|null
|
|
*/
|
|
public function bearerToken()
|
|
{
|
|
$header = $this->header('Authorization', '');
|
|
|
|
if (Str::startsWith($header, 'Bearer ')) {
|
|
return Str::substr($header, 7);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Determine if the request contains a given input item key.
|
|
*
|
|
* @param string|array $key
|
|
* @return bool
|
|
*/
|
|
public function exists($key)
|
|
{
|
|
return $this->has($key);
|
|
}
|
|
|
|
/**
|
|
* Determine if the request contains a given input item key.
|
|
*
|
|
* @param string|array $key
|
|
* @return bool
|
|
*/
|
|
public function has($key)
|
|
{
|
|
$keys = is_array($key) ? $key : func_get_args();
|
|
|
|
$input = $this->all();
|
|
|
|
foreach ($keys as $value) {
|
|
if (! Arr::has($input, $value)) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Determine if the request contains any of the given inputs.
|
|
*
|
|
* @param dynamic $key
|
|
* @return bool
|
|
*/
|
|
public function hasAny(...$keys)
|
|
{
|
|
$input = $this->all();
|
|
|
|
foreach ($keys as $key) {
|
|
if (Arr::has($input, $key)) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Determine if the request contains a non-empty value for an input item.
|
|
*
|
|
* @param string|array $key
|
|
* @return bool
|
|
*/
|
|
public function filled($key)
|
|
{
|
|
$keys = is_array($key) ? $key : func_get_args();
|
|
|
|
foreach ($keys as $value) {
|
|
if ($this->isEmptyString($value)) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Determine if the given input key is an empty string for "has".
|
|
*
|
|
* @param string $key
|
|
* @return bool
|
|
*/
|
|
protected function isEmptyString($key)
|
|
{
|
|
$value = $this->input($key);
|
|
|
|
return ! is_bool($value) && ! is_array($value) && trim((string) $value) === '';
|
|
}
|
|
|
|
/**
|
|
* Get the keys for all of the input and files.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function keys()
|
|
{
|
|
return array_merge(array_keys($this->input()), $this->files->keys());
|
|
}
|
|
|
|
/**
|
|
* Get all of the input and files for the request.
|
|
*
|
|
* @param array|mixed $keys
|
|
* @return array
|
|
*/
|
|
public function all($keys = null)
|
|
{
|
|
$input = array_replace_recursive($this->input(), $this->allFiles());
|
|
|
|
if (! $keys) {
|
|
return $input;
|
|
}
|
|
|
|
$results = [];
|
|
|
|
foreach (is_array($keys) ? $keys : func_get_args() as $key) {
|
|
Arr::set($results, $key, Arr::get($input, $key));
|
|
}
|
|
|
|
return $results;
|
|
}
|
|
|
|
/**
|
|
* Retrieve an input item from the request.
|
|
*
|
|
* @param string $key
|
|
* @param string|array|null $default
|
|
* @return string|array
|
|
*/
|
|
public function input($key = null, $default = null)
|
|
{
|
|
return data_get(
|
|
$this->getInputSource()->all() + $this->query->all(), $key, $default
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get a subset containing the provided keys with values from the input data.
|
|
*
|
|
* @param array|mixed $keys
|
|
* @return array
|
|
*/
|
|
public function only($keys)
|
|
{
|
|
$results = [];
|
|
|
|
$input = $this->all();
|
|
|
|
$placeholder = new stdClass;
|
|
|
|
foreach (is_array($keys) ? $keys : func_get_args() as $key) {
|
|
$value = data_get($input, $key, $placeholder);
|
|
|
|
if ($value !== $placeholder) {
|
|
Arr::set($results, $key, $value);
|
|
}
|
|
}
|
|
|
|
return $results;
|
|
}
|
|
|
|
/**
|
|
* Get all of the input except for a specified array of items.
|
|
*
|
|
* @param array|mixed $keys
|
|
* @return array
|
|
*/
|
|
public function except($keys)
|
|
{
|
|
$keys = is_array($keys) ? $keys : func_get_args();
|
|
|
|
$results = $this->all();
|
|
|
|
Arr::forget($results, $keys);
|
|
|
|
return $results;
|
|
}
|
|
|
|
/**
|
|
* Retrieve a query string item from the request.
|
|
*
|
|
* @param string $key
|
|
* @param string|array|null $default
|
|
* @return string|array
|
|
*/
|
|
public function query($key = null, $default = null)
|
|
{
|
|
return $this->retrieveItem('query', $key, $default);
|
|
}
|
|
|
|
/**
|
|
* Retrieve a request payload item from the request.
|
|
*
|
|
* @param string $key
|
|
* @param string|array|null $default
|
|
*
|
|
* @return string|array
|
|
*/
|
|
public function post($key = null, $default = null)
|
|
{
|
|
return $this->retrieveItem('request', $key, $default);
|
|
}
|
|
|
|
/**
|
|
* Determine if a cookie is set on the request.
|
|
*
|
|
* @param string $key
|
|
* @return bool
|
|
*/
|
|
public function hasCookie($key)
|
|
{
|
|
return ! is_null($this->cookie($key));
|
|
}
|
|
|
|
/**
|
|
* Retrieve a cookie from the request.
|
|
*
|
|
* @param string $key
|
|
* @param string|array|null $default
|
|
* @return string|array
|
|
*/
|
|
public function cookie($key = null, $default = null)
|
|
{
|
|
return $this->retrieveItem('cookies', $key, $default);
|
|
}
|
|
|
|
/**
|
|
* Get an array of all of the files on the request.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function allFiles()
|
|
{
|
|
$files = $this->files->all();
|
|
|
|
return $this->convertedFiles
|
|
? $this->convertedFiles
|
|
: $this->convertedFiles = $this->convertUploadedFiles($files);
|
|
}
|
|
|
|
/**
|
|
* Convert the given array of Symfony UploadedFiles to custom Laravel UploadedFiles.
|
|
*
|
|
* @param array $files
|
|
* @return array
|
|
*/
|
|
protected function convertUploadedFiles(array $files)
|
|
{
|
|
return array_map(function ($file) {
|
|
if (is_null($file) || (is_array($file) && empty(array_filter($file)))) {
|
|
return $file;
|
|
}
|
|
|
|
return is_array($file)
|
|
? $this->convertUploadedFiles($file)
|
|
: UploadedFile::createFromBase($file);
|
|
}, $files);
|
|
}
|
|
|
|
/**
|
|
* Determine if the uploaded data contains a file.
|
|
*
|
|
* @param string $key
|
|
* @return bool
|
|
*/
|
|
public function hasFile($key)
|
|
{
|
|
if (! is_array($files = $this->file($key))) {
|
|
$files = [$files];
|
|
}
|
|
|
|
foreach ($files as $file) {
|
|
if ($this->isValidFile($file)) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Check that the given file is a valid file instance.
|
|
*
|
|
* @param mixed $file
|
|
* @return bool
|
|
*/
|
|
protected function isValidFile($file)
|
|
{
|
|
return $file instanceof SplFileInfo && $file->getPath() !== '';
|
|
}
|
|
|
|
/**
|
|
* Retrieve a file from the request.
|
|
*
|
|
* @param string $key
|
|
* @param mixed $default
|
|
* @return \Illuminate\Http\UploadedFile|array|null
|
|
*/
|
|
public function file($key = null, $default = null)
|
|
{
|
|
return data_get($this->allFiles(), $key, $default);
|
|
}
|
|
|
|
/**
|
|
* Retrieve a parameter item from a given source.
|
|
*
|
|
* @param string $source
|
|
* @param string $key
|
|
* @param string|array|null $default
|
|
* @return string|array
|
|
*/
|
|
protected function retrieveItem($source, $key, $default)
|
|
{
|
|
if (is_null($key)) {
|
|
return $this->$source->all();
|
|
}
|
|
|
|
return $this->$source->get($key, $default);
|
|
}
|
|
}
|