Laravel 5.3: Подготовка к разработке (для новичков)

Введение

Посредники предоставляют удобный механизм для фильтрации HTTP-запросов вашего приложения. Например, в Laravel есть посредник для проверки аутентификации пользователя. Если пользователь не аутентифицирован, посредник перенаправит его на страницу входа в систему. Если же пользователь аутентифицирован, посредник позволит запросу пройти далее в приложение.

Конечно, посредники нужны не только для авторизации. CORS-посредник может пригодиться для добавления особых заголовков ко всем ответам в вашем приложении. А посредник логов может зарегистрировать все входящие запросы.

В Laravel есть несколько стандартных посредников, включая посредники для аутентификации и CSRF-защиты. Все они расположены в директории .

Хранение файлов

Метод используется для записи содержимого на диск. Также вы можете передать PHP методу , чтобы использовать низкоуровневую поддержку потоков Flysystem. Очень рекомендуем использовать потоки при работе с большими файлами:

Автоматическая работа с потоками

Если вы хотите, чтобы Laravel автоматически использовал потоки для записи файла в хранилище, используйте методы или . Эти методы принимают объект или , и автоматически используют потоки для размещения фала в необходимом месте:

У метода есть несколько важных нюансов. Заметьте, мы указали только название каталога без имени файла. По умолчанию метод генерирует UUID в качестве имени файла. Метод вернёт путь к файлу, поэтому вы можете сохранить в БД весь путь, включая сгенерированное имя.

Методы и принимают также аргумент «видимости» сохраняемого файла. Это полезно в основном при хранении файлов в облачном хранилище, таком как S3, когда необходим общий доступ к файлам:

Копирование и перемещение файлов

Метод используется для копирования существующего файла в новое расположение на диске, а метод — для переименования или перемещения существующего файла в новое расположение:

Загрузка файлов

Загрузка файлов в веб-приложениях — это чаще всего загрузка пользовательских файлов, таких как аватар, фотографии и документы. В Laravel очень просто сохранять загружаемые файлы методом на экземпляре загружаемого файла. Просто вызовите метод , указав путь для сохранения загружаемого файла:

В этом примере есть несколько важных моментов. Заметьте, мы указали только название каталога без имени файла. По умолчанию метод генерирует UUID в качестве имени файла. Метод вернёт путь к файлу, поэтому вы можете сохранить в БД весь путь, включая сгенерированное имя.

Также вы можете вызвать метод фасада для выполнения этой же операции над файлом, как показано в примере:

Указание имени файла

Если вы не хотите, чтобы файлу автоматически было назначено имя, можете использовать метод , который принимает в виде аргументов путь, имя файла, и (необязательно) диск:

Конечно, вы также можете использовать метод фасада , который выполняет такую же операцию:

Указание диска

По умолчанию этот метод использует диск по умолчанию. Если необходимо указать другой диск, передайте имя диска в качестве второго аргумента в метод :

Видимость файлов

В интеграции Flysystem в Laravel «видимость» — это абстракция разрешений на файлы для использования на нескольких платформах. Файлы могут быть обозначены как или . Если файл отмечен как , значит он должен быть доступен остальным. Например, при использовании драйвера S3 вы можете получить URL для -файлов.

Вы можете задать видимость при размещении файла методом :

Если файл уже был сохранён, то получить и задать его видимость можно методами и :

Вставка и изменение связанных моделей

Метод Save

Eloquent предоставляет удобные методы для добавления новых моделей к отношениям. Например, если вам понадобится вставить новый для модели . Вместо того, чтобы вручную установить атрибут для , вы можете вставить непосредственно из метода отношения:

Заметьте, что мы не обращались к отношению как к динамическому свойству. Вместо этого мы вызвали метод , чтобы получить экземпляр отношения. Метод автоматически добавит надлежащее значение в новую модель .

Если вам нужно сохранить несколько связанных моделей, вы можете использовать метод :

Метод Create

В дополнение к методам и вы можете также использовать метод , который принимает массив атрибутов, создает модель и вставляет её в базу данных. Различие между и состоит в том, что принимает экземпляр Eloquent модели целиком, в то время как принимает простой PHP :

Вы можете использовать метод для создания нескольких связанных моделей:

Отношения «Принадлежит к»

При обновлении отношения вы можете использовать метод . Этот метод установит внешний ключ на дочерней модели:

При удалении отношения вы можете использовать метод . Этот метод сбросит внешний ключ отношения в :

Присоединение / Отсоединение

Также Eloquent предоставляет несколько дополнительных вспомогательных методов, чтобы сделать работу со связанными моделями более удобной. Например, давайте предположим, что у пользователя может быть много ролей, и у роли может быть много пользователей. Чтобы присоединить роль к пользователю вставкой записи в промежуточную таблицу, которая присоединяется к моделям, используйте метод :

При присоединении отношения к модели вы можете также передать массив дополнительных данных, которые будут вставлены в промежуточную таблицу:

Конечно, иногда может быть необходимо отсоединить роль от пользователя. Чтобы удалить запись отношения многие-ко-многим, используйте метод . Метод удалит соответствующую запись из промежуточной таблицы. Однако, обе модели останутся в базе данных:

Для удобства и также принимают массивы ID:

Синхронизация ассоциаций

Вы можете также использовать метод , чтобы создать ассоциации многие-ко-многим. Метод принимает массив ID, чтобы поместить его в промежуточную таблицу. Все ID, которые не находятся в данном массиве, будут удалены из промежуточной таблицы. После того как эта работа завершена, только ID из данного массива будут существовать в промежуточной таблице:

Также вы можете передать дополнительные значения промежуточной таблицы с массивом ID:

Если вы не хотите отделять существующие ID, используйте метод :

Переключение ассоциаций

Отношение многие-ко-многим также предоставляет метод , который «переключает» состояние присоединений с заданными ID. Если данный ID сейчас присоединён, то он будет отсоединён. И наоборот, если сейчас он отсоединён, то будет присоединён:

Сохранение дополнительных данных в сводной таблице

При работе с отношением многие-ко-многим метод принимает вторым аргументом массив дополнительных атрибутов промежуточной таблицы:

Изменение записи в сводной таблице

Для изменения существующей строки в сводной таблице используйте метод . Этот метод принимает внешний ключ сводной записи и массив атрибутов для изменения:

Добавление собственных провайдеров пользователей

Если вы не используете традиционную реляционную базу данных для хранения ваших пользователей, вам необходимо добавить в Laravel свой собственный провайдер аутентификации пользователей. Мы используем метод фасада для определения своего провайдера:

После регистрации провайдера методом , вы можете переключиться на новый провайдер в файле настроек . Сначала определите провайдера , который использует ваш новый драйвер:

Затем вы можете использовать этот провайдер в вашей настройке :

Контракт User Provider

Реализации отвечают только за извлечение реализаций из постоянных систем хранения, таких как MySQL, Riak, и т.п. Эти два интерфейса позволяют механизмам аутентификации Laravel продолжать функционировать независимо от того, как хранятся данные пользователей и какой тип класса использован для их представления.

Давайте взглянем на контракт :

Функция обычно принимает ключ, отображающий пользователя, такой как автоинкрементный ID из базы данных MySQL. Реализация , соответствующая этому ID, должна быть получена и возвращена этим методом.

Функция принимает пользователя по его уникальному и ключу «запомнить меня», хранящемуся в поле . Как и предыдущий метод, он должен возвращать реализацию .

Метод обновляет поле пользователя значением нового .

Метод принимает массив авторизационных данных, переданных в метод при попытке входа в приложение. Затем метод должен «запросить» у основного постоянного хранилища того пользователя, который соответствует этим авторизационным данным. Обычно этот метод выполняет запрос с условием «where» для . Затем метод должен вернуть реализацию . Этот метод не должен пытаться проверить пароль или аутентифицировать пользователя.

Метод должен сравнить данного с для аутентификации пользователя. Например, этот метод может сравнить строку с для сравнения значения . Этот метод должен возвращать или , указывая верен ли пароль.

Контракт Authenticatable

Теперь, когда мы изучили каждый метод в , давайте посмотрим на контракт . Помните, провайдер должен вернуть реализацию этого интерфейса из методов , , и :

Этот интерфейс довольно прост. Метод должен возвращать имя поля «первичного ключа» пользователя», а метод — «первичный ключ» пользователя. При использовании MySQL это будет автоинкрементный первичный ключ. Метод должен возвращать хешированный пароль пользователя. Этот интерфейс позволяет системе аутентификации работать с классом User, независимо от используемой ORM и уровня абстракции хранилища. По умолчанию Laravel содержит в директории класс , который реализует этот интерфейс. Вы можете подсмотреть в нём пример реализации.

Доступные наблюдатели

Наблюдатели Telescope собирают данные приложения при выполнении запроса или консольной команды. Вы можете настроить список наблюдателей, которые вы хотели бы включить в конфигурационном файле :

Некоторые наблюдатели также предоставляют дополнительные параметры настройки:

Наблюдатель команд

Наблюдатель команд записывает аргументы, параметры, код выхода и выходные данные при каждом выполнении Artisan-команды. Если вы хотите исключить определенные команды из записи наблюдателем, вы можете указать команду в опции в вашем файле :

Наблюдатель дампов

Наблюдатель дампов записывает и отображает ваши переменные дампы в Telescope. При использовании Laravel переменные могут быть сброшены с помощью глобальной функции . Вкладка наблюдателя дампов должна быть открыта в браузере, чтобы запись происходила, иначе наблюдатели будут игнорировать дампы.

Наблюдатель событий

Наблюдатель событий записывает полезную нагрузку, слушателей и широковещательные данные для любых событий, отправляемых вашим приложением. Внутренние события фреймворка Laravel игнорируются наблюдателем событий.

Наблюдатель исключений

Наблюдатель исключений записывает данные и трассировку стека для любых регистрируемых исключений, которые выдает ваше приложение.

Наблюдатель шлюза

Наблюдатель шлюза записывает данные и результаты проверок шлюза и политики вашим приложением. Если вы хотите исключить определенные способности от записи наблюдателем, вы можете указать их в параметре в вашем файле :

Наблюдатель электронной почты

Наблюдатель электронной почты позволяет просматривать предварительный просмотр электронных писем в браузере вместе с соответствующими данными. Вы также можете скачать письмо в виде файла .

Наблюдатель модели

Наблюдатель модели записывает изменения модели всякий раз, когда отправляется событие Eloquent или Вы можете указать, какие события модели должны быть записаны с помощью опции наблюдателя:

Наблюдатель уведомлений

Наблюдатель уведомлений записывает все уведомления, отправленные вашим приложением. Если уведомление вызывает сообщение электронной почты, и у вас включен наблюдатель за электронной почтой, сообщение также будет доступно для предварительного просмотра на экране наблюдателя электронной почты.

Наблюдатель SQL запросов

Наблюдатель SQL запросов записывает необработанный SQL, привязки и время выполнения для всех запросов, которые выполняются вашим приложением. Наблюдатель также помечает любые запросы медленнее 100 мс как Вы можете настроить порог медленного запроса, используя параметр наблюдателя:

Наблюдатель Redis

Наблюдатель Redis записывает все команды Redis, выполненные вашим приложением. Если вы используете Redis для кэширования, команды кэширования также будут записываться наблюдателем Redis.

Наблюдатель запросов

Наблюдатель запросов записывает данные запроса, заголовков, сеанса и ответа, связанные с любыми запросами, обрабатываемыми приложением. Вы можете ограничить данные своего ответа с помощью опции (в КБ):

Наблюдатель расписания

Наблюдатель расписания записывает команды и выходные данные любых запланированных задач, выполняемых вашим приложением.

Удаление задач

Добавление кнопки удаления задачи

Мы оставили отметку «TODO» в коде, где предположительно будет находиться наша кнопка. Давайте добавим кнопку удаления к каждой строке нашего списка задач в представлении tasks.blade.php. Мы создадим маленькую однокнопочную форму для каждой задачи в списке. После нажатия кнопки приложению будет отправляться запрос DELETE /task:

Примечание по спуфингу метода

Обратите внимание на то, что method формы кнопки удаления объявлен как POST, несмотря на то, что мы отвечаем на запрос, используя маршрут. HTML-формы позволяют использовать только GET и POST методы HTTP

А нам нужен способ имитировать запрос DELETE от формы.

Мы можем имитировать запрос DELETE, выводя результаты функции в нашей форме. Эта функция генерирует скрытый ввод формы, который распознается Laravel и используется, чтобы переопределить вызываемый метод HTTP. Сгенерированное поле будет похоже на это:

Удаление задачи

Наконец, давайте добавим к нашему маршруту логику удаления текущей задачи. Мы можем использовать , чтобы автоматически получить модель Task, которая соответствует параметру маршрута {task}.

В обратном вызове нашего маршрута мы используем метод для удаления записи. Как только запись удалена, мы перенаправим пользователя назад к URL :

Определение моделей

Для начала создадим модель Eloquent. Модели обычно располагаются в директории , но вы можете поместить их в любое место, в котором работает автозагрузчик в соответствии с вашим файлом . Все модели Eloquent наследуют класс .

Простейший способ создать экземпляр модели — с помощью Artisan-команды :

Если вы хотите создать миграцию БД при создании модели, используйте параметр или :

Условия для моделей Eloquent

Теперь давайте посмотрим на пример модели , который мы будем использовать для получения и хранения информации из таблицы БД :

Имена таблиц

Заметьте, что мы не указали, какую таблицу Eloquent должен привязать к нашей модели. Если это имя не указано явно, то в соответствии с принятым соглашением будет использовано имя класса в нижнем регистре (snake case) и во множественном числе. В нашем случае Eloquent предположит, что модель хранит свои данные в таблице . Вы можете указать произвольную таблицу, определив свойство в классе модели:

Первичные ключи

Eloquent также предполагает, что каждая таблица имеет первичный ключ с именем . Вы можете определить свойство для указания другого имени.

Вдобавок, Eloquent предполагает, что первичный ключ является инкрементным числом, и автоматически приведёт его к типу . Если вы хотите использовать неинкрементный или нечисловой первичный ключ, задайте открытому свойству вашей модели значение .

Отметки времени

По умолчанию Eloquent ожидает наличия в ваших таблицах столбцов и . Если вы не хотите, чтобы они автоматически обрабатывались в Eloquent, установите свойство класса модели в :

Если вы хотите изменить формат отметок времени, задайте свойство вашей модели. Это свойство определяет, как атрибуты времени будут храниться в базе данных, а также задаёт их формат при сериализации модели в массив или JSON:

Если вам надо изменить имена столбцов для хранения отметок времени, вы можете задать константы и :

Соединение с БД

По умолчанию модели Eloquent будут использовать основное соединение с БД, настроенное для вашего приложения. Если вы хотите указать другое соединение для модели, используйте свойство :

Вставка и изменение моделей

Вставки

Для создания новой записи в БД просто создайте экземпляр модели, задайте атрибуты модели и вызовите метод :

В этом примере мы просто присвоили значение параметра из входящего HTTP-запроса атрибуту экземпляра модели . При вызове метода запись будет вставлена в таблицу. Отметки времени и будут автоматически установлены при вызове , поэтому их не нужно задавать вручную.

Изменения

Метод можно использовать и для изменения существующей модели в БД. Для изменения модели вам нужно получить её, изменить необходимые атрибуты и вызвать метод . Отметка времени будет установлена автоматически, поэтому не надо задавать её вручную:

Массовые изменения

Изменения можно выполнить для нескольких моделей, которые соответствуют указанному запросу. В этом примере все рейсы, которые отмечены как и местоназначение которых равно , будут отмечены как задержанные:

Метод ожидает массив пар столбец/значение, обозначающий, какие столбцы необходимо изменить.

Массовое назначение

Вы также можете использовать метод для создания и сохранения модели одной строкой. Метод вернёт добавленную модель. Однако перед этим вам нужно определить либо свойство , либо в классе модели, так как все модели Eloquent изначально защищены от массового заполнения.

Уязвимость массового заполнения проявляется, когда пользователь передаёт с помощью запроса неподходящий HTTP-параметр, и вы не ожидаете, что этот параметр изменит столбец в вашей БД. Например, злоумышленник может послать в HTTP-запросе параметр , который затем передаётся в метод вашей модели, позволяя пользователю повысить свои привилегии до администратора.

Поэтому, для начала надо определить, для каких атрибутов разрешить массовое назначение. Это делается с помощью свойства модели . Например, давайте разрешим массовое назначение атрибута name нашей модели :

Теперь мы можем использовать метод для вставки новой записи в БД. Метод возвращает сохранённый экземпляр модели:

Если у вас уже есть экземпляр модели, вы можете заполнить его массивом атрибутов с помощью метода :

Защитные атрибуты

В то время как параметр служит «белым списком» атрибутов, для которых разрешено массовое назначение. А параметр служит «чёрным списком». Параметр должен содержать массив атрибутов, для которых будет запрещено массовое назначение. Атрибутам, не вошедшим в этот массив, будет разрешено массовое назначение. Само собой, вы должны использовать только один из этих параметров. В данном примере всем атрибутам кроме разрешено массовое заполнение:

Чтобы разрешить массовое назначение всем атрибутам, определите свойство как пустой массив:

Другие методы создания

Есть ещё два метода, используемые для создания моделей с помощью массового заполнения: и . Метод пытается найти запись БД, используя указанные пары столбец/значение. Если модель не найдена в БД, запись будет вставлена в БД с указанными атрибутами.

Метод , как и , будет пытаться найти в БД запись, соответствующую указанным атрибутам. Однако если модель не найдена, будет возвращён новый экземпляр модели. Учтите, что эта модель ещё не помещена в БД. Вам надо вызвать метод вручную, чтобы сохранить её:

Ещё вы можете столкнуться с ситуациями, когда надо обновить существующую модель или создать новую, если её пока нет. Laravel предоставляет метод для выполнения этой задачи за один шаг. Подобно методу , метод сохраняет модель, поэтому не надо вызывать метод :

Столбцы

Создание столбцов

Для изменения существующей таблицы мы будем использовать метод фасада . Как и метод , метод принимает два аргумента: имя таблицы и замыкание, которое получает экземпляр , который можно использовать для добавления столбцов в таблицу:

Доступные типы столбцов

Разумеется, построитель структур содержит различные типы столбцов, которые вы можете указывать при построении ваших таблиц:

Команда Описание
Инкрементный ID (первичный ключ), использующий эквивалент «UNSIGNED BIG INTEGER».
Эквивалент BIGINT для базы данных.
Эквивалент BLOB для базы данных.
Эквивалент BOOLEAN для базы данных.
Эквивалент CHAR для базы данных.
Эквивалент DATE для базы данных.
Эквивалент DATETIME для базы данных.
Эквивалент DATETIME (с часовым поясом) для базы данных.
Эквивалент DECIMAL с точностью и масштабом.
Эквивалент DOUBLE с точностью, всего 15 цифр, после запятой 8 цифр.
Эквивалент ENUM для базы данных.
Эквивалент FLOAT для базы данных, всего 8 знаков, из них 2 после запятой.
Инкрементный ID (первичный ключ), использующий эквивалент «UNSIGNED INTEGER».
Эквивалент INTEGER для базы данных.
Эквивалент IP-адреса для базы данных.
Эквивалент JSON для базы данных.
Эквивалент JSONB для базы данных.
Эквивалент LONGTEXT для базы данных.
Эквивалент MAC-адреса для базы данных.
Инкрементный ID (первичный ключ), использующий эквивалент «UNSIGNED MEDIUM INTEGER».
Эквивалент MEDIUMINT для базы данных.
Эквивалент MEDIUMTEXT для базы данных.
Добавление столбца INTEGER и STRING.
Аналогично , но разрешено значение NULL.
Аналогично , но разрешено значение NULL.
Добавление столбца как VARCHAR(100) NULL.
Инкрементный ID (первичный ключ), использующий эквивалент «UNSIGNED SMALL INTEGER».
Эквивалент SMALLINT для базы данных.
Добавление столбца для мягкого удаления с разрешенным значением NULL.
Эквивалент VARCHAR.
Эквивалент VARCHAR с длиной.
Эквивалент TEXT для базы данных.
Эквивалент TIME для базы данных.
Эквивалент TIME (с часовым поясом) для базы данных.
Эквивалент TINYINT для базы данных.
Эквивалент TIMESTAMP для базы данных.
Эквивалент TIMESTAMP (с часовым поясом) для базы данных.
Добавление столбцов и с разрешенным значением NULL.
Добавление столбцов и (с часовым поясом), для которых разрешено значение NULL.
Эквивалент Unsigned BIGINT для базы данных.
Эквивалент Unsigned INT для базы данных.
Эквивалент Unsigned MEDIUMINT для базы данных.
Эквивалент Unsigned SMALLINT для базы данных.
Эквивалент Unsigned TINYINT для базы данных.
Эквивалент UUID для базы данных.

Модификаторы столбцов

Вдобавок к перечисленным типам столбцов существует несколько «модификаторов» столбцов, которые вы можете использовать при добавлении столбцов в таблицу. Например, чтобы сделать столбец «обнуляемым», используйте метод :

Ниже перечислены все доступные модификаторы столбцов. В этом списке отсутствуют :

Модификатор Описание
Помещает столбец «после» указанного столбца (только MySQL)
Добавляет комментарий в столбец
Указывает значение «по умолчанию» для столбца
Помещает столбец «первым» в таблице (только MySQL)
Разрешает вставлять значения NULL в столбец
Создать генерируемый столбец типа stored (только MySQL)
Делает столбцы беззнаковыми
Создать генерируемый столбец типа virtual (только MySQL)

Изменение столбцов

Требования

Перед изменением столбцов добавьте зависимость в свой файл . Библиотека Doctrine DBAL используется для определения текущего состояния столбца и создания SQL-запросов, необходимых для выполнения указанных преобразований столбца:

Изменение атрибутов столбца

Метод позволяет изменить тип существующего столбца или изменить его атрибуты. Например, если вы захотите увеличить размер строкового столбца с 25 до 50:

Также мы можем изменить столбец, чтобы он могу иметь значения NULL:

Переименование столбцов

Для переименования столбца используйте метод на построителе структур. Перед переименованием столбца добавьте зависимость в свой файл :

Удаление столбцов

Для удаления столбца используйте метод на построителе структур. Перед удалением столбцов из базы данных SQLite вам необходимо добавить зависимость в ваш файл и выполнить команду для установки библиотеки:

Вы можете удалить несколько столбцов таблицы, передав массив их имён в метод :

Удаление моделей

Для удаления модели вызовите метод на её экземпляре:

Удаление существующей модели по ключу

В предыдущем примере мы получили модель из БД перед вызовом метода . Но если вы знаете первичный ключ модели, вы можете удалить модель, не получая её. Для этого вызовите метод :

Удаление модели запросом

Конечно, вы также можете выполнить оператор удаления на наборе моделей. В этом примере мы удалим все рейсы, отмеченные неактивными. Подобно массовому обновлению, массовое удаление не вызовет никаких событий для удаляемых моделей:

Псевдоудаление

Кроме обычного удаления записей из БД Eloquent также может «псевдоудалять» модели. Модель при таком удалении на самом деле остаётся в базе данных, но в БД устанавливается её атрибут . Если у модели ненулевое значение , значит модель псевдоудалена. Для включения псевдоудаления для модели используйте для неё трейт и добавьте столбец в свойство :

Разумеется, вам необходимо добавить столбец в вашу таблицу. Для этого используется хелпер конструктора таблиц:

Теперь когда вы вызовете метод , поле будет установлено в значение текущей даты и времени. При запросе моделей, использующих псевдоудаление, «удалённые» модели не будут включены в результат запроса.

Для определения того, удалён ли экземпляр модели, используйте метод :

Запрос псевдоудалённых моделей

Включение псевдоудалённых моделей

Как было сказано, псевдоудалённые модели автоматически исключаются из результатов запроса. Для отображения всех моделей, в том числе удалённых, используйте метод :

Метод может быть использован в отношениях:

Восстановление псевдоудалённых моделей

Иногда необходимо восстановить псевдоудалённую модель. Для восстановления псевдоудалённой модели в активное состояние используется метод :

Вы также можете использовать его в запросе для быстрого восстановления нескольких моделей. Подобно другим массовым операциям, это не вызовет никаких событий для восстанавливаемых моделей:

Как и метод , метод можно использовать и в отношениях:

Перманентное удаление моделей

Иногда вам может потребоваться дейсствительно по-настоящему убрать модель из вашей базы данных. Используйте метод , чтобы перманентно удалить псевдоудалённую модель из БД:

Работа с JavaScript

Mix предоставляет несколько функций для работы с JavaScript-файлами, например: компилирование ECMAScript 2015, бандлинг модулей, минификация и простая конкатенация простых JavaScript-файлов. Даже лучше: это все работает незаметно для пользователя, не требуя ни грамма пользовательской настройки:

Используя эту единственную строку кода теперь вы можете воспользоваться следующими плюсами:

  • Синтаксис ES2015.
  • Модули
  • Компиляция файлов .
  • Минификация для продакшна.

Извлечение библиотек поставщика

Одним из потенциальных недостатков бандлинга всего JavaScript приложения с вашими библиотеками поставщиков является то, что это затрудняет долгосрочное кэширование. Например, одно обновление вашего кода приложения заставит браузер повторно загружать все ваши библиотеки поставщиков, даже если они не изменились.

Если вы планируете часто обновлять JavaScript своего приложения, то вам следует рассмотреть вариант извлечение всех своих внешних библиотек в отдельный файл. Таким образом, изменение кода вашего приложения не повлияет на кеширование вашего большого файла . Метод в Mix делает эту задачу чрезвычайно простой:

Метод принимает массив всех библиотек или модулей, которые вы бы хотели извлечь в файл . Используя вышеуказанный сниппет в качестве примера, Mix сгенерирует следующие файлы:

  • : Webpack manifest runtime
  • : Ваши библиотеки поставщика
  • : Код вашего приложения

Убедитесь, что загрузили эти файлы в соответствующем порядке, чтобы избежать ошибок JavaScript:

React

Mix может автоматически установить Babel-плагины, необходимые для поддержки React. Для начала замените на :

Mix в фоновом режиме скачает и включит подходящие Babel-плагины .

Vanilla JS

Схоже с комбинирование таблиц стилей с , вы также можете скомбинировать и минифицировать любое количество файлов JavaScript при помощи метода :

Эта опция особенно полезна для прежних версий проектов, где вам не требовалась компиляция Webpack для вашего JavaScript.

Пользовательская настройка Webpack

Laravel Mix обращается к преднастроенному файлу . Время от времени вам может потребоваться вручную изменить этот файл. У вас, возможно, есть специальный лоадер или плагин, который нужно указывать, или может вы предпочитаете использовать Stylus вместо Sass. В таких случаях у вас будет два выбора:

Слияние пользовательской настройки

Mix предоставляет полезный метод , который позволит выполнить слияение любых коротких Webpack-переопределений. Это крайне привлекательный выбор, так как от вас не требуется копировать и поддерживать собственную копию файла . Метод принимает объект, который должен содержать любую специальную настройку Webpack, которую вы желаете применить.

Пользовательские файлы настроек

Скопируйте файл в корневую директорию вашего проекта, если вы бы хотели полностью изменить свою настройку Webpack. Затем укажите все ссылки в своем файле на этот скопированный конфиг. Если вы решите воспользоваться этим подходом, любые будущие upstream-обновления вашего Mix следует вручную склеивать с вашим измененным файлом.

Условия Where

Простые условия Where

Для добавления в запрос условий используйте метод на экземпляре конструктора запросов. Самый простой вызов требует три аргумента. Первый — имя столбца. Второй — оператор (любой из поддерживаемых базой данных). Третий — значение для сравнения со столбцом.

Например, вот запрос, проверяющий равенство значения столбца «votes» и 100:

Для удобства, если вам необходимо просто проверить равенство значения столбца и данного значения, вы можете передать значение сразу вторым аргументом метода :

Разумеется, вы можете использовать различные другие операторы при написании условия :

В функцию также можно передать массив условий:

Условия Or

Вы можете сцепить вместе условия where, а также добавить условия к запросу. Метод принимает те же аргументы, что и метод :

Дополнительные условия Where

whereBetween

Метод проверяет, что значение столбца находится в указанном интервале:

whereNotBetween

Метод проверяет, что значение столбца находится вне указанного интервала:

whereIn / whereNotIn

Метод проверяет, что значение столбца содержится в данном массиве:

Метод проверяет, что значение столбца не содержится в данном массиве:

whereNull / whereNotNull

Метод проверяет, что значение столбца равно :

Метод проверяет, что значение столбца не равно :

whereDate / whereMonth / whereDay / whereYear

Метод служит для сравнения значения столбца с датой:

Метод служит для сравнения значения столбца с месяцем в году:

Метод служит для сравнения значения столбца с днём месяца:

Метод служит для сравнения значения столбца с указанным годом:

whereColumn

Для проверки на совпадение двух столбцов можно использовать метод :

В метод также можно передать оператор сравнения:

В метод также можно передать массив с несколькими условиями. Эти условия будут объединены оператором :

Группировка параметров

Иногда вам нужно сделать выборку по более сложным параметрам, таким как «where exists» или вложенная группировка условий. Конструктор запросов Laravel справится и с такими запросами. Для начала посмотрим на пример группировки условий в скобках:

Как видите, передав в метод , мы дали конструктору запросов команду, начать группировку условий. Замыкание получит экземпляр конструктора запросов, который вы можете использовать для задания условий, поместив их в скобки. Приведённый пример выполнит такой SQL-запрос:

Условия Where Exists

Метод позволяет написать SQL-условия . Метод принимает в качестве аргумента замыкание, которое получит экземпляр конструктора запросов, позволяя вам определить запрос для помещения в условие «exists»:

Этот пример выполнит такой SQL-запрос:

Laravel также поддерживает запросы для столбцов типа JSON в тех БД, которые поддерживают тип столбцов JSON. На данный момент это MySQL 5.7 и Postgres. Для запроса JSON столбца используйте оператор :

Установка

Требования к серверу

Фреймворк Laravel предъявляет некоторые системные требования. Конечно же, виртуальная машина Laravel Homestead соответствует всем этим требованиям, поэтому настоятельно рекомендуется использовать Homestead в качестве основной локальной среды разработки с Laravel.

Однако, если вы не используете Homestead, вам необходимо убедиться, что ваш сервер соответствует следующим требованиям:

  • PHP >= 5.6.4
  • Расширение PHP OpenSSL
  • Расширение PHP PDO
  • Расширение PHP Mbstring
  • Расширение PHP Tokenizer
  • Расширение PHP XML

Установка Laravel

Laravel использует Composer для управления своими зависимостями, поэтому убедитесь в том, что Composer установлен на вашей машине.

С помощью установщика Laravel

Сначала скачайте установщик Laravel с помощью Composer:

Проверьте, чтобы директория (или аналогичная в зависимости от вашей ОС) находилась в переменной $PATH, что позволит вашей системе найти и выполнить команду .

После установки команда создаёт свежую установку Laravel в указанной вами директории. Например, создаст директорию с названием , которая будет содержать свежую установку Laravel со всеми зависимостями:

Локальный сервер разработки

Если локально у вас уже установлен PHP и вы хотели бы использовать встроенный сервер для работы вашего приложения, то вы можете использовать команду Artisan . Эта команда запустит сервер разработки по адресу :

Конечно же, Homestead и Valet предоставляют наиболее надежные способы локальной разработки.

Настройка

Общедоступная директория

После установки Laravel вам следует указать директорию в качестве корневой директории вашего веб-сервера. Файл в этой категории выступает в роли фронт-контроллера всех HTTP-запросов, поступающих в ваше приложение.

Файлы настройки

Все файлы настройки фреймворка Laravel расположены в директории . Параметры в каждом из них снабжены комментариями, поэтому не стесняйтесь пройтись по этим файлам и познакомиться с доступными параметрами настройки.

Права доступа на директории

Так же, после установки Laravel вам может потребоваться настройка некоторых прав доступа. Директории внутри и должны быть доступны для записи веб-сервером, в противном случае Laravel не запустится. Если вы используете виртуальную машину Homestead, то эти права доступа уже установлены.

Ключ приложения

Следующее, что вы должны сделать после установки Laravel, это создать ключ шифрования для вашего приложения в виде случайного набора символов. Если вы установили Laravel через Composer или установщик Laravel, то этот ключ уже был создан с помощью команды .

Как правило, это строка должна быть длиной в 32 символа. Ключ должен быть указан в параметре файла окружения . Если вы не переименовывали файл в , то следует сделать это сейчас. Если ключ приложения не создан, то сессии ваших пользователей и другие шифруемые данные не будут в безопасности!

Дополнительная настройка

Laravel практически не требует настройки из коробки. Вы сразу можете начать разработку! Однако, рекомендуем ознакомиться с файлом — он содержит в себе несколько параметров, таких как часовой пояс () и локаль (), которые вы можете изменить согласно потребностям вашего приложения.

Вы также можете настроить некоторые дополнительные компоненты Laravel, такие как:

Ссылка на основную публикацию