Проверить существует ли файл laravel
Этот перевод актуален для англоязычной документации на 28.01.2017 (ветка 5.3) , 08.12.2016 (ветка 5.2) , 19.06.2016 (ветка 5.1) и 08.02.2016 (ветка 5.0). Опечатка? Выдели и нажми Ctrl+Enter.
Валидация запросов
Чтобы создать класс запроса, используйте artisan-команду make:request :
Для того, чтобы фреймворк перехватил запрос перед контроллером, добавьте этот класс в аргументы необходимого метода контроллера:
При грамотном использовании валидации запросов вы можете быть уверены, что в ваших контроллерах всегда находятся только отвалидированные входные данные !
В случае неудачной валидации фреймворк заполняет флэш-переменные ошибками валидации и возврашает редирект на предыдущую страницу. В случае AJAX-запроса отдается ответ с кодом 422 и JSON с ошибками валидации.
Путь и метод запроса
Получение пути запроса
Проверка пути / маршрута запроса
Метод is проверит, соответствует ли путь входящего запроса шаблону. Допускается использование метасимвола подстановки * :
Используя метод routeIs , вы можете определить, соответствует ли входящий запрос именованному маршруту:
Получение URL-адреса запроса
Чтобы получить полный URL для входящего запроса, вы можете использовать методы url или fullUrl . Метод url вернет URL без строки запроса, а метод fullUrl , включая строку запроса:
Если вы хотите добавить данные строки запроса к текущему URL, то вы можете вызвать метод fullUrlWithQuery . Этот метод объединяет переданный массив переменных строки запроса с текущей строкой запроса:
Получение метода запроса
Obtaining Disk Instances
The Storage facade may be used to interact with any of your configured disks. For example, you may use the put method on the facade to store an avatar on the default disk. If you call methods on the Storage facade without first calling the disk method, the method call will automatically be passed to the default disk:
If your applications interacts with multiple disks, you may use the disk method on the Storage facade to work with files on a particular disk:
Ответы - как проверить, существует ли каталог с Storage:: facade в laravel? / how to check if directory exists with Storage:: facade in laravel?
Если вы хотите проверить наличие каталога, попробуйте сделать это:
Вы можете получить все каталоги в виде массива, а затем проверить, есть ли там каталог (путь).
в laravel 5.4 $exists = Storage::disk('public')->exists('images/test_image.jpg'); - с 'public' , который был сконфигурирован в filesystem.php
'images/test_image.jpg' - это путь изображения.
Есть две вещи, которые нужно проверить: (1) что путь существует, и (2) что путь является каталогом.
Это позволит проверить наличие пути (синтаксис для Laravel 5.2+), независимо от того, является ли он файлом или каталогом:
Как только вы узнаете, что он существует, это подтвердит, что путь является каталогом:
Базовая библиотека Flysystem будет кэшировать все, что может, при проверке файловой системы (которая может быть локальной или удаленной), поэтому в нормальных условиях эти две функции будут делать только один вызов файловой системы.
Если вы хотите проверить, существует ли каталог, и создать его, если он не существует, этот код будет работать для вас.
Ну, вы можете легко сделать это через файловый фасад File::isDirectory($YOURDIRECTORYPATHHERE); , который вернет логическое значение, основанное на существовании!
Еще один способ для laravel 5.5-использование фасада хранилища.
Вы можете легко использовать Storage::isDirectory() . Storage::class -это экземпляр \Illuminate\Filesystem\Filesystem , и он содержит метод isDirectory для проверки того, существует ли данный путь и является ли он каталогом или нет.
Laravel provides a powerful filesystem abstraction thanks to the wonderful Flysystem PHP package by Frank de Jonge. The Laravel Flysystem integration provides simple to use drivers for working with local filesystems, Amazon S3, and Rackspace Cloud Storage. Even better, it's amazingly simple to switch between these storage options as the API remains the same for each system.
IP-адрес запроса
Метод ip используется для получения IP-адреса клиента, который сделал запрос к вашему приложению:
Directories
Get All Files Within A Directory
The files method returns an array of all of the files in a given directory. If you would like to retrieve a list of all files within a given directory including all sub-directories, you may use the allFiles method:
Get All Directories Within A Directory
The directories method returns an array of all the directories within a given directory. Additionally, you may use the allDirectories method to get a list of all directories within a given directory and all of its sub-directories:
Create A Directory
The makeDirectory method will create the given directory, including any needed sub-directories:
Delete A Directory
Finally, the deleteDirectory may be used to remove a directory and all of its files:
Сохранение загруженных файлов
Чтобы сохранить загруженный файл, вы обычно будете использовать одно из ваших настроенных файловых хранилищ. Класс UploadedFile имеет метод store , который перемещает загруженный файл на один из ваших дисков, находящийся в вашей локальной файловой системе или в облачном хранилище, таком как Amazon S3.
Метод store принимает путь, по которому файл должен храниться относительно настроенного корневого каталога файловой системы. Этот путь не должен содержать имени файла, поскольку в качестве имени файла будет автоматически создан уникальный идентификатор.
Метод store также принимает необязательный второй аргумент для имени диска, который следует использовать для хранения файла. Метод вернет путь к файлу относительно корня диска:
Если вы не хотите, чтобы имя файла создавалось автоматически, вы можете использовать метод storeAs , который принимает в качестве аргументов путь, имя файла и имя диска:
Для получения дополнительной информации о хранилище файлов в Laravel, ознакомьтесь с полной документацией по файловому хранилищу.
Драйвер local
При использовании драйвера local все файловые операции выполняются относительно каталога root , определенного в вашем конфигурационном файле. По умолчанию это каталог storage/app . Поэтому следующий метод сохранит файл в storage/app/file.txt :
Получение данных полей ввода
Получение данных всех полей ввода
Вы можете получить все данные входящего запроса в виде массива, используя метод all . Этот метод можно использовать независимо от того, поступает ли входящий запрос из HTML-формы или является запросом XHR:
Используя метод collect , вы можете получить все входные данные входящего запроса в виде коллекции:
Метод collect также позволяет вам получить подмножество входных данных входящего запроса в виде коллекции:
Получение значения конкретного поля ввода
Вы можете передать значение по умолчанию в качестве второго аргумента метода input . Это значение будет возвращено, если запрошенное значение отсутствует в запросе:
При работе с формами, содержащими массив входных данных, используйте «точечную» нотацию для доступа к элементам массива:
Вы можете вызвать метод input без аргументов, чтобы получить все значения входных данных в виде ассоциативного массива:
Получение данных из строки запроса
В то время как метод input извлекает значения из всей информационной части данных запроса (включая строку запроса), метод query извлекает значения только из строки запроса:
Если значение данных из строки запроса отсутствуют, будет возвращен второй аргумент этого метода:
Вы можете вызвать метод query без аргументов, чтобы получить все значения строки запроса в виде ассоциативного массива:
Получение значений JSON-содержимого
При отправке запросов JSON в ваше приложение, вы можете получить доступ к данным JSON с помощью метода input , если заголовок запроса Content-Type корректно установлен как application/json . Вы даже можете использовать «точечную» нотацию для извлечения значений, вложенных в JSON-массивы:
Получение значений логического типа
При работе с элементами HTML, такими как флажки, ваше приложение может получать «логические» значения, которые на самом деле являются строками. Например, строковые «true» или «on». Для удобства вы можете использовать метод boolean , чтобы получить эти значения как логические. Метод boolean возвращает true для 1 , true , и строковых «1», «true», «on» и «yes». Все остальные значения вернут false :
Получение значений Даты
Для удобства входные значения, содержащие дату/время, могут быть получены как экземпляры Carbon с использованием метода date . Если запрос не содержит входного значения с заданным именем, будет возвращен null :
Второй и третий аргументы, принятые методом date , могут использоваться для указания формата даты и часового пояса соответственно:
Если входное значение присутствует, но имеет недопустимый формат, будет выброшено исключение InvalidArgumentException , поэтому рекомендуется проверять ввод перед вызовом метода date .
Получение данных через динамические свойства
При использовании динамических свойств Laravel сначала будет искать значение параметра в информационной части данных запроса. Если его нет, Laravel будет искать поле в соответствующих параметрах маршрута.
Частичное получение данных полей ввода
Если вам нужно получить подмножество входных данных, вы можете использовать методы only и except . Оба метода принимают один массив или динамический список аргументов:
Метод only возвращает все пары ключ / значение, которые вы запрашиваете. Однако, он не вернет пары ключ / значение, которых нет в запросе.
Данные полей ввода
Согласование содержимого
Laravel содержит несколько методов для проверки типов запрошенного содержимого входящего запроса через заголовок Accept . Во-первых, метод getAcceptableContentTypes вернет массив, содержащий все типы контента, принятые запросом:
Метод accepts принимает массив типов контента и возвращает true , если какой-либо из типов контента принят запросом. В противном случае будет возвращено false :
Вы можете использовать метод prefers , чтобы определить, какой тип контента, из указанного в массиве типов контента, является наиболее предпочтительным для запроса. Если ни один из предоставленных типов контента не будет принят запросом, будет возвращено значение null :
Поскольку многие приложения обслуживают только HTML или JSON, вы можете использовать метод expectsJson , чтобы быстро определить, ожидает ли входящий запрос JSON-ответа:
Собственные правила проверки
Laravel изначально содержит множество полезных правил, однако вам может понадобиться создать собственные. Одним из способов зарегистрировать произвольное правило - через метод Validator::extend .
Примечание: имя правила должно быть в формате_с_подчёркиваниями .
Переданная функция-замыкание получает три параметра: имя проверяемого поля $attribute , значение поля $value и массив параметров $parameters , переданных правилу.
Вместо функции в метод extend можно передать ссылку на метод класса:
Расширение класса Validator
Вместо использования функций-замыканий для расширения набора доступных правил вы можете расширить сам класс Validator . Для этого создайте класс, который наследует Illuminate\Validation\Validator . Вы можете добавить новые методы проверок, начав их имя с validate .
Затем вам нужно зарегистрировать это расширение валидации. Сделать это можно, например, в вашем сервис-провайдере или в ваших старт-файлах.
File Metadata
In addition to reading and writing files, Laravel can also provide information about the files themselves. For example, the size method may be used to get the size of the file in bytes:
The lastModified method returns the UNIX timestamp of the last time the file was modified:
Именованные MessageBag
Если у вас есть несколько форм на странице, то вы можете выбрать имя объекта MessageBag, в котором будут возвращаться тексты ошибок, чтобы вы могли их корректно отобразить для нужной формы.
Получить текст ошибки из MessageBag с именем login:
Конфигурирование доверенных прокси
Если вы используете AWS Elastic Load Balancing, значение $headers должно быть Request::HEADER_X_FORWARDED_AWS_ELB . Для получения дополнительной информации о константах, которые могут использоваться в свойстве $headers , ознакомьтесь с документацией Symfony о доверенных прокси-серверах.
Доверие ко всем прокси
Если вы используете Amazon AWS или другой поставщик «облачных» балансировщиков нагрузки, то вы можете не знать IP-адреса своих фактических балансировщиков. В этом случае вы можете использовать * , чтобы доверять всем прокси:
Custom Filesystems
Laravel's Flysystem integration provides drivers for several "drivers" out of the box; however, Flysystem is not limited to these and has adapters for many other storage systems. You can create a custom driver if you want to use one of these additional adapters in your Laravel application.
In order to set up the custom filesystem you will need a Flysystem adapter. Let's add a community maintained Dropbox adapter to our project:
Next, you should create a service provider such as DropboxServiceProvider . In the provider's boot method, you may use the Storage facade's extend method to define the custom driver:
The first argument of the extend method is the name of the driver and the second is a Closure that receives the $app and $config variables. The resolver Closure must return an instance of League\Flysystem\Filesystem . The $config variable contains the values defined in config/filesystems.php for the specified disk.
Once you have created the service provider to register the extension, you may use the dropbox driver in your config/filesystems.php configuration file.
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel attempts to take the pain out of development by easing common tasks used in most web projects.
Хук после валидации
Вы можете добавить несколько after , если это нужно.
Данные прошлого запроса
Laravel позволяет вам сохранить входные данные из текущего запроса на время выполнения следующего запроса. Эта функция особенно полезна для повторного заполнения форм после обнаружения ошибок валидации. Однако, если вы используете содержащуюся в Laravel валидацию, то, возможно, вам не придется вручную использовать эти методы кратковременного сохранения входных данных в сессии напрямую, так как некоторые встроенные средства валидации Laravel будут вызывать их автоматически.
Кратковременное сохранение входных данных в сессии
Вы также можете использовать методы flashOnly и flashExcept для передачи подмножества данных запроса в сессию. Эти методы полезны для скрытия конфиденциальной информации из сессии, например, пароли:
Кратковременное сохранение при перенаправлении
Так как вам часто нужно выполнять кратковременное сохранение входных данных в сессии, а затем перенаправлять на предыдущую страницу, вы можете легко связать сохранение данных с перенаправлением, используя метод withInput :
Получение данных прошлого запроса
Laravel также содержит глобального помощника old . Если вы показываете данные из предыдущего запроса в шаблоне Blade, удобнее использовать помощник old для повторного заполнения формы. Если для поля не были указаны данные в предыдущем запросе, то будет возвращен null :
Конфигурирование доверенных хостов
Метод allSubdomainsOfApplicationUrl вернет регулярное выражение, соответствующее всем поддоменам значения app.url конфигурации вашего приложения. Этот метод обеспечивает удобный способ разрешить все поддомены вашего приложения при создании приложения, с использованием поддоменов, определяемых метасимволами подстановки.
Простейший пример валидации
Первый параметр, передаваемый методу make - данные для проверки. Второй параметр - правила, которые к ним должны быть применены.
Использование массивов для указания правил
Несколько правил могут быть разделены либо прямой чертой (|), либо быть отдельными элементами массива.
Проверка нескольких полей
Как только был создан экземпляр Validator , метод fails (или passes ) может быть использован для проведения проверки.
Проверка файлов
Класс Validator содержит несколько изначальных правил для проверки файлов, такие как size , mimes и другие. Для выполнения проверки над файлами просто передайте эти файлы вместе с другими данными.
Изменения формата ошибок во флэш-переменных
Получение ошибки в заданном формате
Файлы
Запросы стандарта PSR-7
После того как вы установили эти библиотеки, вы можете получить запрос PSR-7, объявив тип интерфейса запроса для замыкания вашего маршрута или контроллера:
Если вы вернете экземпляр ответа PSR-7 из маршрута или контроллера, он будет автоматически преобразован обратно в экземпляр ответа Laravel и отобразится фреймворком.
Retrieving Files
The get method may be used to retrieve the contents of a file. The raw string contents of the file will be returned by the method. Remember, all file paths should be specified relative to the "root" location configured for the disk:
The exists method may be used to determine if a file exists on the disk:
Файлы Cookies
Получение файлов Cookies из запроса
Правила проверки
Ниже список всех доступных правил и их функции:
accepted
Поле должно быть в значении yes, on или 1. Это полезно для проверки принятия правил и лицензий.
active_url
Поле должно быть корректным URL, доступным через функцию checkdnsrr.
after:date
Поле должно быть датой, более поздней, чем date. Строки приводятся к датам функцией strtotime .
alpha
Поле должно содержать только алфавитные символы.
alpha_dash
Поле должно содержать только алфавитные символы, цифры, знаки подчёркивания (_) и дефисы (-).
alpha_num
Поле должно содержать только алфавитные символы и цифры.
array
Поле должно быть массивом.
Поле должно быть датой, более ранней, чем date. Строки приводятся к датам функцией strtotime .
between:min,max
Поле должно иметь размер в диапазоне от min до max. Строки, числа и файлы трактуются аналогично правилу size .
boolean
Поле должно быть логическим (булевым). Разрешенные значения: true , false , 1 , 0 , "1" и "0" .
confirmed
Значение поля должно соответствовать значению поля с этим именем, плюс foo_confirmation . Например, если проверяется поле password , то на вход должно быть передано совпадающее по значению поле password_confirmation .
Поле должно быть правильной датой в соответствии с функцией strtotime .
date_format:format
Поле должно подходить под формат даты format в соответствии с функцией date_parse_from_format .
different:field
Значение проверяемого поля должно отличаться от значения поля field.
Поле должно быть корректным адресом e-mail.
exists:table,column
Поле должно существовать в заданной таблице базе данных.
Простое использование:
Указание имени поля в таблице:
Вы также можете указать больше условий, которые будут добавлены к запросу "WHERE":
image
Загруженный файл должен быть изображением в формате jpeg, png, bmp, gif или svg.
in:foo,bar.
Значение поля должно быть одним из перечисленных (foo, bar и т.д.).
integer
Поле должно иметь корректное целочисленное значение.
Поле должно быть корректным IP-адресом.
max:value
Значение поля должно быть меньше или равно value. Строки, числа и файлы трактуются аналогично правилу size .
mimes:foo,bar.
MIME-тип загруженного файла должен быть одним из перечисленных.
Простое использование:
min:value
Значение поля должно быть более value. Строки, числа и файлы трактуются аналогично правилу size .
not_in:foo,bar.
Значение поля не должно быть одним из перечисленных (foo, bar и т.д.).
numeric
Поле должно иметь корректное числовое или дробное значение.
regex:pattern
Поле должно соответствовать заданному регулярному выражению.
Внимание: при использовании этого правила может быть нужно перечислять другие правила в виде элементов массива, особенно если выражение содержит символ вертикальной черты (|).
required
Проверяемое поле должно присутствовать и иметь непустое значение.
required_if:field,value.
Проверяемое поле должно присутствовать и иметь непустое значение, если другое поле field присутствует и имеет любое из значений value.
required_with:foo,bar.
Проверяемое поле должно присутствовать и иметь непустое значение, но только если присутствует и имеет непустое значение хотя бы одно из перечисленных полей (foo, bar и т.д.).
required_with_all:foo,bar.
Проверяемое поле должно присутствовать и иметь непустое значение, но только если присутствуют и имеют непустое значение все перечисленные поля (foo, bar и т.д.).
required_without:foo,bar.
Проверяемое поле должно присутствовать и иметь непустое значение, но только если не присутствует или имеет пустое значение хотя бы одно из перечисленных полей (foo, bar и т.д.).
required_without_all:foo,bar.
Проверяемое поле должно присутствовать и иметь непустое значение, но только если не присутствуют или имеют пустые значения все перечисленные поля (foo, bar и т.д.).
same:field
Поле должно иметь то же значение, что и поле field.
size:value
Поле должно иметь совпадающий с value размер. Для строк это обозначает длину, для чисел - число, для файлов - размер в килобайтах.
timezone
Поле должно содержать идентификатор часового пояса (таймзоны), один из перечисленных в php-функции timezone_identifiers_list
unique:table,column,except,idColumn
Значение поля должно быть уникальным в заданной таблице базы данных. Если column не указано, то будет использовано имя поля.
Простое использование
Указание имени поля в таблице
Игнорирование определённого ID
Добавление дополнительных условий
Вы также можете указать больше условий, которые будут добавлены к запросу "WHERE"":
В правиле выше только строки с account_id равном 1 будут включены в проверку.
Поле должно быть корректным URL.
Примечание: используется PHP-функция filter_var
Изменения формата ошибок
Обрезание и нормализация значений полей ввода
The Public Disk
The public disk is intended for files that are going to be publicly accessible. By default, the public disk uses the local driver and stores these files in storage/app/public . To make them accessible from the web, you should create a symbolic link from public/storage to storage/app/public . This convention will keep your publicly accessible files in one directory that can be easily shared across deployments when using zero down-time deployment systems like Envoyer.
To create the symbolic link, you may use the storage:link Artisan command:
Of course, once a file has been stored and the symbolic link has been created, you can create a URL to the files using the asset helper:
Доступ к запросу
Внедрение зависимостей и параметры маршрута
Если ваш метод контроллера также ожидает входных данных от параметра маршрута, вы должны указать параметры маршрута после других зависимостей. Например, если ваш маршрут определен так:
Ошибки и шаблоны
Как только вы провели проверку, вам понадобится простой способ, чтобы передать ошибки в шаблон. Laravel позволяет удобно сделать это. Например, у нас есть такие роуты:
Однако, заметьте, мы не передаем в View::make('user.register'); переменные $errors в шаблон. Laravel сам проверяет данные сессии на наличие переменных и автоматически передает их шаблону, если они доступны. Таким образом, важно помнить, что переменная $errors будет доступна для всех ваших шаблонов всегда, при любом запросе.. Это позволяет вам считать, что переменная $errors всегда определена и может безопасно использоваться. Переменная $errors - экземпляр класса MessageBag .
Таким образом, после переадресации вы можете прибегнуть к автоматически установленной в шаблоне переменной $errors :
File URLs
You may use the url method to get the URL for the given file. If you are using the local driver, this will typically just prepend /storage to the given path and return a relative URL to the file. If you are using the s3 or rackspace driver, the fully qualified remote URL will be returned:
Remember, if you are using the local driver, all files that should be publicly accessible should be placed in the storage/app/public directory. Furthermore, you should create a symbolic link at public/storage which points to the storage/app/public directory.
Temporary URLs
Local URL Host Customization
If you would like to pre-define the host for files stored on a disk using the local driver, you may add a url option to the disk's configuration array:
Storing Files
The put method may be used to store raw file contents on a disk. You may also pass a PHP resource to the put method, which will use Flysystem's underlying stream support. Using streams is greatly recommended when dealing with large files:
Automatic Streaming
There are a few important things to note about the putFile method. Note that we only specified a directory name, not a file name. By default, the putFile method will generate a unique ID to serve as the file name. The path to the file will be returned by the putFile method so you can store the path, including the generated file name, in your database.
The putFile and putFileAs methods also accept an argument to specify the "visibility" of the stored file. This is particularly useful if you are storing the file on a cloud disk such as S3 and would like the file to be publicly accessible:
Prepending & Appending To Files
The prepend and append methods allow you to write to the beginning or end of a file:
Copying & Moving Files
The copy method may be used to copy an existing file to a new location on the disk, while the move method may be used to rename or move an existing file to a new location:
Получение экземпляров дисков
Для взаимодействия с любым из ваших сконфигурированных дисков можно использовать фасад Storage . Например, вы можете использовать метод этого фасада PHP put () , чтобы сохранить аватар на диск по умолчанию. Если вы вызовите метод фасада Storage без предварительного вызова метода PHP disk () , то вызов метода будет автоматически передан диску по умолчанию:
Общий диск
Диск public предназначен для общего доступа к файлам. По умолчанию диск public использует драйвер local и хранит файлы в storage/app/public . Чтобы сделать их доступными через веб, вам надо создать символьную ссылку из public/storage на storage/app/public . При этом ваши общедоступные файлы будут храниться в одной папке, которую легко можно использовать в разных развёртываниях при использовании систем обновления на лету, таких как Envoyer.
Для создания символьной ссылки используйте Artisan-команду sh storage:link :
Само собой, когда файл сохранён и создана символьная ссылка, вы можете создать URL к файлу с помощью вспомогательной функции PHP asset () :
Заголовки запроса
Метод hasHeader используется, чтобы определить, содержит ли запрос указанный заголовок:
Для удобства метод bearerToken может использоваться для получения токена из заголовка Authorization . Если такого заголовка нет, то будет возвращена пустая строка:
Условные правила
Иногда вам нужно валидировать некое поле только тогда, когда оно присутствует во входных данных. Для этого добавьте правило sometimes :
В примере выше для поля email будет запущена валидация только когда $data['email'] существует.
Сложные условные правила
Иногда вам нужно, чтобы поле имело какое-либо значение только если другое поле имеет значеие, скажем, больше 100. Или вы можете требовать наличия двух полей, только когда также указано третье. Это легко достигается условными правилами. Сперва создайте объект Validator с набором статичных правил, которые никогда не изменяются:
Теперь предположим, что ваше приложение написано для коллекционеров игр. Если регистрируется коллекционер с более, чем 100 играми, то мы хотим их спросить, зачем им такое количество. Например, у них может быть магазин или может им просто нравится их собирать. Итак, для добавления такого условного правила мы используем метод Validator .
Первый параметр этого метода - имя поля, которое мы проверяем. Второй параметр - правило, которое мы хотим добавить, если переданная функция-замыкание (третий параметр) вернёт true . Этот метод позволяет легко создавать сложные правила проверки ввода. Вы можете даже добавлять одни и те же условные правила для нескольких полей одновременно:
Примечание: Параметр $input , передаваемый замыканию - объект Illuminate\Support\Fluent и может использоваться для чтения проверяемого ввода и файлов.
Примечание: строка :attribute будет заменена на имя проверяемого поля. Вы также можете использовать и другие строки-переменные.
Использование других переменных-строк
Контроль доступа
Классы Form Request также содержат метод authorize . В этом методе вы можете проверять, разрешено ли пользователю совершать это действие, обновлять данный ресурс. Например, если пользователь пытается отредактировать комментарий к посту, является ли он его автором ?
Обратите внимание на вызов метода route() выше. Этод метод дает вам доступ к параметрам в урле (в данном случае это ), определенным в роуте:
Если ваша логика авторизации и проверки доступа находится в контроллере, просто верните true в этом методе:
Введение
Laravel предоставляет мощную абстракцию для работы с файловой системой благодаря восхитительному PHP-пакету Flysystem от Франка де Жонге. Laravel Flysystem содержит простые в использовании драйвера для работы с локальными файловыми системами, Amazon S3 и Rackspace Cloud Storage. Более того, можно очень просто переключаться между этими вариантами хранения файлов, поскольку у всех одинаковый API.
The Local Driver
When using the local driver, all file operations are relative to the root directory defined in your configuration file. By default, this value is set to the storage/app directory. Therefore, the following method would store a file in storage/app/file.txt :
Получение загруженных файлов
Вы можете определить, представлен ли файл в запросе, используя метод hasFile :
Валидация загрузки файлов
Помимо проверки наличия файла, вы можете убедиться, что не было ли каких-либо проблем с загрузкой файла с помощью метода isValid :
Пути к файлам и расширения
Класс UploadedFile также содержит методы для доступа к полному пути файла и его расширению. Метод extension попытается угадать расширение файла на основе его содержимого. Это расширение может отличаться от расширения, предоставленного клиентом:
Другие методы для работы с загружаемыми файлами
Для экземпляров UploadedFile доступно множество других методов. Дополнительные сведения об этих методах смотрите в документации по API для этого класса.
Взаимодействие с запросом
File Visibility
In Laravel's Flysystem integration, "visibility" is an abstraction of file permissions across multiple platforms. Files may either be declared public or private . When a file is declared public , you are indicating that the file should generally be accessible to others. For example, when using the S3 driver, you may retrieve URLs for public files.
You can set the visibility when setting the file via the put method:
If the file has already been stored, its visibility can be retrieved and set via the getVisibility and setVisibility methods:
Настройка
Настройки файловой системы находятся в файле config/filesystems.php . В нём вы можете настроить все свои «disks» . Каждый диск представляет определенный драйвер и место хранения. В конфигурационном файле имеются примеры для каждого поддерживаемого драйвера. Поэтому вы можете просто немного изменить конфигурацию под ваши нужды!
Конечно, вы можете сконфигурировать столько дисков, сколько вам будет угодно, и даже можете иметь несколько дисков, которые используют один драйвер.
Требования к драйверам
Пакеты Composer
Перед использованием S3 или Rackspace вы должны установить соответствующие пакеты при помощи Composer:
- Amazon S3: league/flysystem-aws-s3-v3 ~1.0
- Rackspace: league/flysystem-rackspace ~1.0
Настройка драйвера S3
Настройки драйвера S3 находятся в файле config/filesystems.php . Там есть пример массива настроек для драйвера S3. Вы можете отредактировать этот массив в соответствии с вашими настройками и учётными данными для S3.
Настройка драйвера FTP
Интеграция Flysystem отлично работает с FTP, но в стандартном файле настроек filesystems.php нет примера настройки FTP. Если вам надо настроить файловую систему FTP, вы можете использовать в качестве примера приведенные ниже настройки:
Настройка драйвера Rackspace
Интеграция Flysystem отлично работает с Rackspace, но в стандартном файле настроек filesystems.php нет примера настройки Rackspace. Если вам надо настроить файловую систему Rackspace, вы можете использовать в качестве примера приведенные ниже настройки:
File Uploads
In web applications, one of the most common use-cases for storing files is storing user uploaded files such as profile pictures, photos, and documents. Laravel makes it very easy to store uploaded files using the store method on an uploaded file instance. Call the store method with the path at which you wish to store the uploaded file:
There are a few important things to note about this example. Note that we only specified a directory name, not a file name. By default, the store method will generate a unique ID to serve as the file name. The path to the file will be returned by the store method so you can store the path, including the generated file name, in your database.
You may also call the putFile method on the Storage facade to perform the same file manipulation as the example above:
Specifying A File Name
If you would not like a file name to be automatically assigned to your stored file, you may use the storeAs method, which receives the path, the file name, and the (optional) disk as its arguments:
Of course, you may also use the putFileAs method on the Storage facade, which will perform the same file manipulation as the example above:
Specifying A Disk
By default, this method will use your default disk. If you would like to specify another disk, pass the disk name as the second argument to the store method:
Configuration
The filesystem configuration file is located at config/filesystems.php . Within this file you may configure all of your "disks". Each disk represents a particular storage driver and storage location. Example configurations for each supported driver are included in the configuration file. So, modify the configuration to reflect your storage preferences and credentials.
Of course, you may configure as many disks as you like, and may even have multiple disks that use the same driver.
Driver Prerequisites
Composer Packages
Before using the S3 or Rackspace drivers, you will need to install the appropriate package via Composer:
- Amazon S3: league/flysystem-aws-s3-v3 ~1.0
- Rackspace: league/flysystem-rackspace ~1.0
S3 Driver Configuration
The S3 driver configuration information is located in your config/filesystems.php configuration file. This file contains an example configuration array for an S3 driver. You are free to modify this array with your own S3 configuration and credentials. For convenience, these environment variables match the naming convention used by the AWS CLI.
FTP Driver Configuration
Laravel's Flysystem integrations works great with FTP; however, a sample configuration is not included with the framework's default filesystems.php configuration file. If you need to configure a FTP filesystem, you may use the example configuration below:
Rackspace Driver Configuration
Laravel's Flysystem integrations works great with Rackspace; however, a sample configuration is not included with the framework's default filesystems.php configuration file. If you need to configure a Rackspace filesystem, you may use the example configuration below:
Валидация в контроллерах
Писать полный код валидации каждый раз, когда нужно провалидировать данные - это неудобно. Поэтому Laravel предоставляет несколько решений для упрощения этой процедуры.
Код, приведенный выше, аналогичен вот этому::
Определение наличия требуемых данных
Вы можете использовать метод has , чтобы определить, присутствует ли значение в запросе. Метод has возвращает true , если значение присутствует в запросе:
При передаче массива метод has определяет, присутствуют ли все указанные значения:
Метод whenHas выполнит переданное замыкание, если в запросе присутствует значение:
Второе замыкание может быть передано методу whenHas , которое будет выполнено, если указанное значение отсутствует в запросе:
Метод hasAny возвращает true , если присутствует какое-либо из указанных значений:
Если вы хотите определить, присутствует ли значение в запросе и не является ли оно пустым, то вы можете использовать метод filled :
Метод whenFilled выполнит указанное замыкание, если значение присутствует в запросе и не является пустым:
Второе замыкание может быть передано методу whenFilled которое будет выполнено, если указанное значение «не заполнено»:
Чтобы определить, отсутствует ли конкретный ключ в запросе, вы можете использовать метод missing :
Deleting Files
The delete method accepts a single filename or an array of files to remove from the disk:
If necessary, you may specify the disk that the file should be deleted from:
Читайте также: