Что нового ждет нас в Laravel 5.2.23

Original author: Mohamed Said
  • Translation
В настоящий момент Laravel насчитывает уже 911 участников на GitHub, многие из них активно добавляют новый функционал. Давайте посмотрим что же ждет нас новенького в Laravel версии 5.2.23, которая уже на пороге.
image

Новое правило валидации 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();
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 28

    0
    Спасибо, прекрасные новости — почти каждый пункт из списка закрывает личную боль. Не зря потратил время на обновление до 5.2.
      +3
      whereNameAndEmailOrPhone

      Настолько сладок синтаксис, что, наконец, он горек
        0
        Вот да, поясните, кто уже знает, как оно работает? Сравниваем первое и второе поле и затем, с результатом третье?
          0
          Думаю, что также как ::where('name', $name)->where('email',$email)->orWhere('phone',$phone)
          Надо будет попробовать ...
            0
            Чую что так оно и есть. Логика-то у Лары довольно проста и эффективна.
            +3
            Да, то есть он по порядку их соединяет (вот тут поидее https://github.com/illuminate/database/blob/master/Query/Builder.php#L1060). Лично мне без скобочек не уютно :)
          0
          кто нибудь знает есть ли полная книга на русском!
            0
            Ты о доке по Ларе?
              0
              Я конечно только за официальные доки, но чем плох http://laravel.su/ ?
                +1
                Тем что самая свежая версия документации для версии 5.0.

                Лично сам начинал с помощью документации на русском (странно, потому что чтение англ. документации у меня проблем не вызывает) и плюнул на это дело после того, как долго пытался понять почему код из документации не работает так как описано. Оказалось в версии 5.2 нужно было делать совсем по другому и код для версии 5.0 не подходит.
                  –2
                  Ну я принципиально её не читаю, и ни кому не рекомендую.
                    0
                    Недавно поднял свой серв laravel-doc.ru с актуальной информацией. Сейчас переведено 3 страницы доки из 58 для Laravel 5.2.
                    Вскоре выложу перевод других.
                      0
                      А чего не в рамках проекта например laravel.su? Там может и сообщество подключилось бы.
                        0
                        Там подключено сообщество. И репа у них есть. И перевел я туда одну статью когда еще 5.0 была самой свежей…
                        … на дворе 5.2, а пул-реквест они все-то не приняли.
                        Еще погуглив не нашел достойной (на мой взгляд) доки на русском, вот и решил сам сделать.
                        И комьюнити может подключиться из числа желающих, делая пул-реквесты в репу на GitHub
                          0
                          Так написал бы мне, я бы дал доступ и было все в рамках сообщества.
                          Пока переведено мало, можешь смело подключаться.
                            0
                            Спасибо за предложение, свое роднее))
                              0
                              Так каждый "растаскивает" по "своему родному". Сообществу тоже помогать надо.
                            0
                            Я не вижу вашего пулл-реквеста в LaravelRUS-репозитории с документацией.
                              0
                              Если я не ошибаюсь, пул-реквест удаляется в случае, если отправитель удаляет форк.
                              Я его давным давно удалил.
                                0
                                Минусуешь мои сообщения за иную точку зрения?..
                    +1
                    Назначение:

                    Arr::first() & Arr::last() 

                    останется для меня загадкой...
                      +1
                      Бывают моменты, когда из массива нужно получить первое и последнее значение.
                      ИМХО, автор так и перевел.

                      В чем загадка?
                        0
                        Да, причем с коллбеком изначально было — те получить первый элемент массива, который одобрит коллбек.
                        Не разу не использовал ) но считаю довольно полезным.
                          +1
                          Предполагаю в том, что такой функционал есть в самом php (правда без колбека):
                          http://php.net/manual/ru/function.reset.php
                          http://php.net/manual/en/function.end.php
                            0
                            reset и end во-первых, принимают только ссылку на массив, то есть передать туда результат выполнения функции вы не можете, а во-вторых, кроме собственно чтения, смещают внутренний указатель массива, то есть состояние массива после их использования меняется, что может привести к проблемам.
                            Если посмотреть реализацию, то видно, что там те же reset и end и используются, то есть это просто более удобный синтаксис.
                            0
                            Slid высказался за меня уже.
                          +2
                          whereNameAndEmail

                          Настало время, когда магию используют ради магии.
                            +1
                            Еще можно добавить инфу из твита:


                            image

                            Only users with full accounts can post comments. Log in, please.