Новое правило валидации in_array
Правила валидации в laravel просто изумительная вещь, я лично заменил кучу кода в некоторых проектах на пару строк валидации.
В 5.2.23 добавлено новое правило. Оно помогает проверить что значение элемента массива содержится в другом массиве:
Validator::make(
[
'devices' => [['user_id' => 1], ['user_id' => 2]],
'users' => [['id' => 1, ['id' => 2]]]
],
['devices.*.user_id' => 'in_array:users.*.id']
);
Здесь происходит проверка того, что все значения user_id у devices соответcвуют ключам id из массива users .
У Arr::first() & Arr::last() коллбек теперь опционален
Ранее коллбек был обязателен в качестве второго параметра, теперь нет:
$array = [100, 200, 300];
// По НОВОМУ Этот код вернет 100
Arr::first($array); /** тоже самое что и **/ array_first($array);
// По НОВОМУ Этот код вернет 300
Arr::last($array); /**тоже самое что и **/ array_last($array);
// Можно и (как РАНЬШЕ) сделать это и получить 200
Arr::first($array, function ($key, $value) {
return $value >= 150;
});
Указание более одного посредника(middleware) одновременно
В контроллере теперь при указании посредника можно задать сразу несколько одной строкой.
$this->middleware(['auth', 'subscribed'], ['only' => ['getCandy']]);
Новые директивы Blade php, @endphp, и unset
Директива php позволит писать PHP выражения таким образом:
@php($count = 1)
@php(++ $count)
@php
$now = new DateTime();
$environment = isset($env) ? $env : "testing";
@enphp
unset — всего лишь обертка для unset().
@unset($count)
Возможность переопределять основные директивы Blade
До версии 5.2.23 было невозможно расширять Blade и переопределять основные директивы, теперь любое ваше расширение может переопределить любую директиву.
Новый почтовый драйвер для SparkPost
Новый метод monthlyOn() для описания задач по расписанию
$schedule->call(function () {
DB::table('shopping_list')->delete();
})->monthlyOn(4, '12:00');
Новый метод app()->isLocale()
// Вместо этого
if (app()->getLocale() == 'en')
// можно сделать
if (app()->isLocale('en'))
Выборки по JSON полям в MySQL 5.7 при помощи построителя запросов
В MySQL 5.7 появился новый тип столбца — JSON, В Laravel 5.2.23 можно делать выборки по этим полям также свободно как и обычно.
Представим, что у нас есть таблица users с колонкой name типа JSON, поле содержит значения типа:
{"en":"name","ar":"nom"}
Теперь можно составить подобное условие
User::where('name->en', 'name')->get();
// Углубиться в структуру JSON можно при помощи оператора `->`.
User::where('contacts->phone->home', 1234);
Новые методы для тестирования seeElement() и dontSeeElement()
Если на странице есть такой элемент
<image width="100" height="50">
Можно проверить его наличие при помощи такого теста:
$this->seeElement('image', ['width' => 100, 'height' => 50]);
Или проверить отсутствие элемента c классом video
$this->dontSeeElement('image', ['class' => 'video']);
Малоизвестные плюшки
Вы знали, что уже можно делать так?
User::whereNameAndEmail('jon', 'jon@theWall.com')->first();
User::whereNameAndEmailOrPhone('jon', 'jon@theWall.com', '123321')->first();
DB::table('users')->whereEmailOrUsername('mail@mail.com', 'themsaid')->first();
Комментарии (28)
redc0de
10.03.2016 13:36+3whereNameAndEmailOrPhone
Настолько сладок синтаксис, что, наконец, он горекnegasus
10.03.2016 14:59Вот да, поясните, кто уже знает, как оно работает? Сравниваем первое и второе поле и затем, с результатом третье?
redc0de
10.03.2016 15:30+3Да, то есть он по порядку их соединяет (вот тут поидее https://github.com/illuminate/database/blob/master/Query/Builder.php#L1060). Лично мне без скобочек не уютно :)
SOLON7
10.03.2016 16:02кто нибудь знает есть ли полная книга на русском!
cawakharkov
10.03.2016 20:07Я конечно только за официальные доки, но чем плох http://laravel.su/ ?
xpert13
10.03.2016 20:54+1Тем что самая свежая версия документации для версии 5.0.
Лично сам начинал с помощью документации на русском (странно, потому что чтение англ. документации у меня проблем не вызывает) и плюнул на это дело после того, как долго пытался понять почему код из документации не работает так как описано. Оказалось в версии 5.2 нужно было делать совсем по другому и код для версии 5.0 не подходит.Helldar
11.03.2016 07:44Недавно поднял свой серв laravel-doc.ru с актуальной информацией. Сейчас переведено 3 страницы доки из 58 для Laravel 5.2.
Вскоре выложу перевод других.Rencom
11.03.2016 08:21А чего не в рамках проекта например laravel.su? Там может и сообщество подключилось бы.
Helldar
11.03.2016 11:59Там подключено сообщество. И репа у них есть. И перевел я туда одну статью когда еще 5.0 была самой свежей…
… на дворе 5.2, а пул-реквест они все-то не приняли.
Еще погуглив не нашел достойной (на мой взгляд) доки на русском, вот и решил сам сделать.
И комьюнити может подключиться из числа желающих, делая пул-реквесты в репу на GitHub
cawakharkov
10.03.2016 20:05+1Назначение:
Arr::first() & Arr::last()
останется для меня загадкой...Helldar
11.03.2016 07:47+1Бывают моменты, когда из массива нужно получить первое и последнее значение.
ИМХО, автор так и перевел.
В чем загадка?Rencom
11.03.2016 08:23Да, причем с коллбеком изначально было — те получить первый элемент массива, который одобрит коллбек.
Не разу не использовал ) но считаю довольно полезным.
Sild
11.03.2016 10:05+1Предполагаю в том, что такой функционал есть в самом php (правда без колбека):
http://php.net/manual/ru/function.reset.php
http://php.net/manual/en/function.end.phpGero
14.03.2016 21:03reset и end во-первых, принимают только ссылку на массив, то есть передать туда результат выполнения функции вы не можете, а во-вторых, кроме собственно чтения, смещают внутренний указатель массива, то есть состояние массива после их использования меняется, что может привести к проблемам.
Если посмотреть реализацию, то видно, что там те же reset и end и используются, то есть это просто более удобный синтаксис.
Helldar
14.03.2016 18:00+1Еще можно добавить инфу из твита:
In @laravelphp 5.2.23 you'll be able to use the @verbatim directive to mark areas that should not be parsed by Blade pic.twitter.com/Cx2TMdbsVo
— Duilio Palacios (@Sileence) 14 марта 2016 г.
koceg
Спасибо, прекрасные новости — почти каждый пункт из списка закрывает личную боль. Не зря потратил время на обновление до 5.2.