В настоящий момент 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();

Комментарии (28)


  1. koceg
    10.03.2016 10:37

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


  1. redc0de
    10.03.2016 13:36
    +3

    whereNameAndEmailOrPhone

    Настолько сладок синтаксис, что, наконец, он горек


    1. negasus
      10.03.2016 14:59

      Вот да, поясните, кто уже знает, как оно работает? Сравниваем первое и второе поле и затем, с результатом третье?


      1. Rencom
        10.03.2016 15:06

        Думаю, что также как ::where('name', $name)->where('email',$email)->orWhere('phone',$phone)
        Надо будет попробовать ...


        1. Helldar
          10.03.2016 19:07

          Чую что так оно и есть. Логика-то у Лары довольно проста и эффективна.


      1. redc0de
        10.03.2016 15:30
        +3

        Да, то есть он по порядку их соединяет (вот тут поидее https://github.com/illuminate/database/blob/master/Query/Builder.php#L1060). Лично мне без скобочек не уютно :)


  1. SOLON7
    10.03.2016 16:02

    кто нибудь знает есть ли полная книга на русском!


    1. Helldar
      10.03.2016 19:06

      Ты о доке по Ларе?


    1. cawakharkov
      10.03.2016 20:07

      Я конечно только за официальные доки, но чем плох http://laravel.su/ ?


      1. xpert13
        10.03.2016 20:54
        +1

        Тем что самая свежая версия документации для версии 5.0.

        Лично сам начинал с помощью документации на русском (странно, потому что чтение англ. документации у меня проблем не вызывает) и плюнул на это дело после того, как долго пытался понять почему код из документации не работает так как описано. Оказалось в версии 5.2 нужно было делать совсем по другому и код для версии 5.0 не подходит.


        1. cawakharkov
          10.03.2016 22:37
          -2

          Ну я принципиально её не читаю, и ни кому не рекомендую.


        1. Helldar
          11.03.2016 07:44

          Недавно поднял свой серв laravel-doc.ru с актуальной информацией. Сейчас переведено 3 страницы доки из 58 для Laravel 5.2.
          Вскоре выложу перевод других.


          1. Rencom
            11.03.2016 08:21

            А чего не в рамках проекта например laravel.su? Там может и сообщество подключилось бы.


            1. Helldar
              11.03.2016 11:59

              Там подключено сообщество. И репа у них есть. И перевел я туда одну статью когда еще 5.0 была самой свежей…
              … на дворе 5.2, а пул-реквест они все-то не приняли.
              Еще погуглив не нашел достойной (на мой взгляд) доки на русском, вот и решил сам сделать.
              И комьюнити может подключиться из числа желающих, делая пул-реквесты в репу на GitHub


              1. xelam
                12.03.2016 16:29

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


                1. Helldar
                  12.03.2016 16:33

                  Спасибо за предложение, свое роднее))


                  1. xelam
                    12.03.2016 16:48

                    Так каждый "растаскивает" по "своему родному". Сообществу тоже помогать надо.


              1. JhaoDa
                12.03.2016 18:35

                Я не вижу вашего пулл-реквеста в LaravelRUS-репозитории с документацией.


                1. Helldar
                  12.03.2016 18:38

                  Если я не ошибаюсь, пул-реквест удаляется в случае, если отправитель удаляет форк.
                  Я его давным давно удалил.


                1. Helldar
                  12.03.2016 19:58

                  Минусуешь мои сообщения за иную точку зрения?..


  1. cawakharkov
    10.03.2016 20:05
    +1

    Назначение:

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

    останется для меня загадкой...


    1. Helldar
      11.03.2016 07:47
      +1

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

      В чем загадка?


      1. Rencom
        11.03.2016 08:23

        Да, причем с коллбеком изначально было — те получить первый элемент массива, который одобрит коллбек.
        Не разу не использовал ) но считаю довольно полезным.


      1. Sild
        11.03.2016 10:05
        +1

        Предполагаю в том, что такой функционал есть в самом php (правда без колбека):
        http://php.net/manual/ru/function.reset.php
        http://php.net/manual/en/function.end.php


        1. Gero
          14.03.2016 21:03

          reset и end во-первых, принимают только ссылку на массив, то есть передать туда результат выполнения функции вы не можете, а во-вторых, кроме собственно чтения, смещают внутренний указатель массива, то есть состояние массива после их использования меняется, что может привести к проблемам.
          Если посмотреть реализацию, то видно, что там те же reset и end и используются, то есть это просто более удобный синтаксис.


      1. cawakharkov
        11.03.2016 13:31

        Slid высказался за меня уже.


  1. pistol
    12.03.2016 20:32
    +2

    whereNameAndEmail

    Настало время, когда магию используют ради магии.


  1. Helldar
    14.03.2016 18:00
    +1

    Еще можно добавить инфу из твита:


    image