123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397 |
- <?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 string|array $keys
- * @return bool
- */
- public function hasAny($keys)
- {
- $keys = is_array($keys) ? $keys : func_get_args();
-
- $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 request contains a non-empty value for any of the given inputs.
- *
- * @param string|array $keys
- * @return bool
- */
- public function anyFilled($keys)
- {
- $keys = is_array($keys) ? $keys : func_get_args();
-
- foreach ($keys as $key) {
- if ($this->filled($key)) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * 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|null $key
- * @param string|array|null $default
- * @return string|array|null
- */
- 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);
- }
- }
|