Laravel

Готовый код для Pagination в Bulma для Laravel 5

Сначала вам нужно скопировать к себе в resources/views шаблон пагинации. Делаем:

php artisan vendor:publish --tag=laravel-pagination

Эта команда разместит шаблоны в папке resources/views/vendor/pagination.

По-умолчанию Laravel использует шаблон bootstrap-4.blade.php. Меняем его код:

@if ($paginator->hasPages())
    <nav class="pagination is-centered" role="navigation" aria-label="pagination">
        {{-- Previous Page Link --}}
        @if ($paginator->onFirstPage())
            <a class="pagination-previous" disabled>Previous</a>
        @else
            <a class="pagination-previous" href="{{ $paginator->previousPageUrl() }}">Previous</a>
        @endif

        {{-- Next Page Link --}}
        @if ($paginator->hasMorePages())
            <a class="pagination-next" href="{{ $paginator->nextPageUrl() }}">Next Page</a>
        @else
            <a class="pagination-next" disabled>Next Page</a>
        @endif
        

        {{-- Pagination Elements --}}
        <ul class="pagination-list">
            @foreach ($elements as $element)
                {{-- "Three Dots" Separator --}}
                @if (is_string($element))
                    <li><span class="pagination-ellipsis">…</span></li>
                @endif

                {{-- Array Of Links --}}
                @if (is_array($element))
                        @foreach ($element as $page => $url)
                            @if ($page == $paginator->currentPage())
                                <li><a class="pagination-link is-current" aria-label="Goto page {{ $page }}">{{ $page }}</a></li>
                            @else
                                <li><a href="{{ $url }}" class="pagination-link" aria-label="Goto page {{ $page }}">{{ $page }}</a></li>
                            @endif
                        @endforeach
                @endif
            @endforeach
        </ul>

    </nav>
@endif

Как посмотреть размер всех подключаемых через Laravel-mix Javascript библиотек

Бывает полезно посмотреть размер файлов всех подключаемых библиотек и фреймворков, из которых собирается приложение. Это можно легко сделать с помощью плагина bundle-analyzer для Webpack. Ставим плагин:

npm i laravel-mix-bundle-analyzer

Добавляем плагин в webpack.mix.js:

const mix = require('laravel-mix');
require('laravel-mix-bundle-analyzer');

if (!mix.inProduction()) {
    mix.bundleAnalyzer();
}

Теперь вы можете запустить npm run dev, и после сборки откроется браузер с анализом:

Результат работы Bundle-analyzer

Полная документация к плагину доступна на сайте laravel-mix.

Плюрализация строк в Laravel для русского языка

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

{{ trans_choice('Публикация|Публикации|Публикаций', $user->articles->count()) }}

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

Как получить Email пользователя при авторизации Вконтакте через Laravel Socialite

Стандартный способ получения эл. почты в Laravel Socialite не работает для Вконтакте:

$userSocial = Socialite::driver('vkontakte')->user();
$user = new User;
$user->name = $userSocial->name;
$user->email = $userSocial->email;
$user->save();

Это происходит потому, что Вконтакте возвращает ответ в нестандартном формате JSON. Вот так можно получить почту пользователя:

public static function getUserEmail($user, $provider)
{
    if($provider == 'vkontakte') {
        return $user->accessTokenResponseBody['email'] ?? null;
    }
    return $user->email;
}