Долгое время отправка писем в Laravel была не очень удобной в сравнении с относительно простым API большинства других функций Laravel. Вот пример отправки письма из документации Laravel 5.2:
За последние несколько лет в сообществе Laravel приобрели большую популярность поисковые инструменты ElasticSearch и Algolia — мощные средства для индексирования и поиска ваших данных. Бен Корлет проделал невероятную работу, представив ElasticSearch на Laracon Eu 2014, а я написал запрос на включение в Laravel написанного мной индексирования для документов на основе ElasticSearch в 2015 году. Но перед тем, как мой запрос был одобрен, люди из Algolia взяли мой код и переделали его на основе Algolia (она быстрее, и у неё лучше пользовательский интерфейс!), и теперь именно этот поиск вы видите в документации Laravel.
В Laravel отличная библиотека страничного вывода, потому что страничный вывод является одной из основных задач, а библиотека берёт на себя почти всю работу. Раньше изменять свои шаблоны страничного вывода было так же просто, как и работать с самой библиотекой.
Но в целях упрощения экспорта библиотеки страничного вывода в проекты на других фреймворках, в Laravel 5.0 (а может и раньше) появилась намного более сложная — но более переносимая — система шаблонов страничного вывода.
К счастью, в Laravel 5.3 всё стало так, как раньше — легко и просто.
В Laravel 5.3 появилась новая возможность проверки ввода: размер загружаемого изображения. Правило проверки называется dimensions, оно принимает следующие параметры:
- min_width — минимальная ширина (в пикселях)
- max_width — максимальная ширина
- min_height — минимальная высота
- max_height — максимальная высота
- width — требуемая ширина (должна быть равной этому значению)
- height — требуемая высота
- ratio — требуемое соотношение сторон (указывается в виде «ширина/высота»)
Если вам надо отфильтровать коллекцию Laravel и получить только те записи, которые соответствуют заданным критериям, то скорее всего вы воспользуетесь методами PHPfilter()
или PHPreject()
. Вот как это работает:
Возможность преобразования данных в формат JSON и из него появилась в Laravel в версии 5.0, но раньше это было сделано только для удобства, а данные хранились по-прежнему в текстовом поле. Но в MySQL 5.7 появился настоящий тип JSON.
В Laravel 5.3 появился простой синтаксис для поиска и изменения данных на основе значений конкретных ключей в JSON-столбцах.
Пришло время для ещё одной новой функции в Laravel 5.3!
Глобальные вспомогательные методы в Laravel
В своей книге я писал о том, что заметил наличие шаблона в таких глобальных вспомогательных методах, как PHPsession()
и, в каком то смысле, в PHPcookie()
. Они могут выполнять три основные функции: PHPget
— получить значение, PHPput
— передать значение, или вернуть экземпляр своего исполняющего сервиса.
Ещё одна новинка в Laravel 5.3! На этот раз это обновление метода PHPfirstOrCreate()
в Eloquent.
Для тех, кто не знаком с этим методом: вы можете передать массив значений в метод PHPfirstOrCreate()
, и он будет искать запись с указанными свойствами. Если она существует, метод вернёт найденный экземпляр, а если нет — создаст её и вернёт созданный экземпляр.
Давайте рассмотрим ещё одну новую возможность, появившуюся в Laravel 5.3.
Что такое директивы Blade?
Язык шаблонов Laravel Blade предоставляет нечто, называемое «директивы», которые представляют собой настраиваемые теги для часто используемых управляющих структур, начинающиеся с символа @. Если вы когда-нибудь писали шаблоны в Blade, то скорее всего знаете @if, @foreach и т.д.
Вообще, эти директивы управляющих структур просто эмулируют соотвествующие PHP-аналоги. Например, PHP@if(condition)
— это то же самое, что и PHP<?php if (condition):
.
Знакомство с переменной PHP$loop
В версии 5.3 директива PHP@foreach
обрела немного суперсилы в виде переменной PHP$loop
, которая доступна в каждом цикле PHP@foreach
.
В Laravel можно просто задать переменные среды, специфичные для вашего тестового окружения. Просто отредактируйте свой файл phpunit.xml и задайте их как записи блока <php>:
xml<php>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="DB_DATABASE" value=":memory:"/>
<env name="DB_CONNECTION" value="sqlite"/>
<env name="TWILIO_FROM_NUMBER" value="+15005550006"/>
</php>
Но что делать, если вам вдруг понадобилось исключить их из контроля версий?
Смотрел я Laravel Scout. Не очень убедительная штука. Во-первых, ясно, что Тейлор за Algolia, т.к. она платная и у него конечно есть тут коммерческий интерес. Поддержку Elasticsearch он то добавлял, то исключал, потом опять включал. Есть в его действиях какая-то непоследовательность. Ему даже в твиттере об этом кто-то написал.
Поддержка бесплатного и прекрасного Elasticsearch в Laravel Scout очень ограничена. Например, там нет агрегаций. Вывод такой — вместо использования скаута можно спокойно использовать полнотекстовый поиск mysql. А если нужен серьезный поиск по большой базе, то гораздо лучше поставить стандартный php-клиент от сообщества Elasticsearch, который может реально все!