Verification: a143cc29221c9be0

Php array push if not exist

Php array push if not exist

Введение

Blade – это простой, но мощный движок шаблонов, входящий в состав Laravel. В отличие от некоторых шаблонизаторов PHP, Blade не ограничивает вас в использовании простого кода PHP в ваших шаблонах. На самом деле, все шаблоны Blade компилируются в простой код PHP и кешируются до тех пор, пока не будут изменены, что означает, что Blade добавляет фактически нулевую нагрузку вашему приложению. Файлы шаблонов Blade используют расширение файла .blade.php и обычно хранятся в каталоге resources/views.

Шаблоны Blade могут быть возвращены из маршрутов или контроллера с помощью глобального помощника view. Конечно, как упоминалось в документации по HTML-шаблонам, данные могут быть переданы в шаблоны Blade, используя второй аргумент помощника view:

Route::get('/', function () {
    return view('greeting', ['name' => 'Finn']);
});
Прежде чем углубиться в Blade, обязательно прочтите Laravel документацию по HTML-шаблонам.

Отображение данных

Вы можете отображать данные, которые передаются в шаблоны Blade, заключив переменную в фигурные скобки. Например, учитывая следующий маршрут:

Route::get('/', function () {
    return view('welcome', ['name' => 'Samantha']);
});

Вы можете отобразить содержимое переменной name следующим образом:

Hello, {{ $name }}.
Выражения вывода {{ }} Blade автоматически отправляются через функцию htmlspecialchars PHP для предотвращения XSS-атак.

Вы не ограничены отображением содержимого переменных, переданных в шаблон. Вы также можете вывести результаты любой функции PHP. Фактически, вы можете поместить любой PHP-код в выражение вывода Blade:

The current UNIX timestamp is {{ time() }}.

Вывод JSON

Иногда вы можете передать массив вашему шаблону с намерением отобразить его как JSON, чтобы инициализировать переменную JavaScript. Например:

script>
    var app = echo json_encode($array); ?>;
script>

Однако вместо ручного вызова json_encode вы можете использовать директиву @json Blade. Директива @json принимает те же аргументы, что и функция json_encode PHP. По умолчанию директива @json вызывает функцию json_encode с флагами JSON_HEX_TAG, JSON_HEX_APOS, JSON_HEX_AMP, и JSON_HEX_QUOT:

script>
    var app = @json($array);

    var app = @json($array, JSON_PRETTY_PRINT);
script>
Вы должны использовать директиву @json только для отображения существующих переменных как JSON. Шаблонизатор Blade основан на регулярных выражениях, и попытки передать сложное выражение в директиву могут вызвать неожиданные сбои.

Преобразование в HTML-сущности

По умолчанию Blade (и глобальный помощник e Laravel) будет дважды кодировать объекты HTML. Если вы хотите отключить двойное кодирование, вызовите метод Blade::withoutDoubleEncoding в методе boot вашего AppServiceProvider:

namespace App\Providers;

use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    
    public function boot()
    {
        Blade::withoutDoubleEncoding();
    }
}

Вывод неэкранированных данных

По умолчанию, выражения вывода {{ }} Blade автоматически отправляются через функцию htmlspecialchars PHP для предотвращения XSS-атак. Если вы не хотите, чтобы ваши данные были экранированы, вы можете использовать следующий синтаксис:

Hello, {!! $name !!}.
Будьте очень осторожны при выводе содержимого, полученого от пользователей вашего приложения. Обычно следует использовать экранированный синтаксис двойных фигурных скобок для предотвращения атак XSS при отображении данных, предоставленных пользователем.

Blade и JavaScript фреймворки

Поскольку во многих фреймворках JavaScript также используются «фигурные» скобки, чтобы указать, что данное выражение должно отобразиться в браузере, вы можете использовать символ @, чтобы сообщить движку Blade, что выражение должно остаться нетронутым. Например:

h1>Laravelh1>

Hello, @{{ name }}.

В этом примере Blade удалит символ @; однако выражение {{ name }} останется нетронутым движком Blade, что позволит обработать его вашим фреймворком JavaScript.

Символ @ также используется для исключения из обработки директив Blade:

{{-- Шаблон Blade --}}
@@json()


@json()

Директива @verbatim

Если вы отображаете переменные JavaScript в крупной части своего шаблона, вы можете заключить HTML в директиву @verbatim, чтобы вам не приходилось добавлять префикс @ к каждому выражению вывода Blade:

@verbatim
    div class="container">
        Hello, {{ name }}.
    div>
@endverbatim

Директивы Blade

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

Операторы If

Вы можете создавать операторы if, используя директивы @if, @elseif, @else, и @endif. Эти директивы работают так же, как и их аналоги в PHP:

@if (count($records) === 1)
    I have one record!
@elseif (count($records) > 1)
    I have multiple records!
@else
    I don't have any records!
@endif

Для удобства Blade также содержит директиву @unless:

@unless (Auth::check())
    You are not signed in.
@endunless

В дополнение к уже обсужденным условным директивам, директивы @isset и @empty могут использоваться в качестве удобных ярлыков для соответствующих функций PHP:

@isset($records)
    
@endisset

@empty($records)
    
@endempty

Директивы аутентификации

Директивы @auth и @guest могут использоваться для быстрого определения, является ли текущий пользователь аутентифицированным или считается гостем:

@auth
    
@endauth

@guest
    
@endguest

При необходимости вы можете указать охранника аутентификации для проверки при использовании директив @auth и @guest:

@auth('admin')
    
@endauth

@guest('admin')
    
@endguest

Директивы окружения

Вы можете проверить, запущено ли приложение в эксплуатационном окружении, с помощью директивы @production:

@production
    
@endproduction

Или вы можете определить, работает ли приложение в конкретной среде, с помощью директивы @env:

@env('staging')
    
@endenv

@env(['staging', 'production'])
    
@endenv

Директивы секций

Вы можете определить, есть ли в секции наследуемого шаблона содержимое, используя директиву @hasSection:

@hasSection('navigation')
    div class="pull-right">
        @yield('navigation')
    div>

    div class="clearfix">div>
@endif

Вы можете использовать директиву sectionMissing, чтобы определить, что в секции нет содержимого:

@sectionMissing('navigation')
    div class="pull-right">
        @include('default-navigation')
    div>
@endif

Операторы Switch

Операторы Switch могут быть созданы с использованием директив @switch, @case, @break, @default и @endswitch:

@switch($i)
    @case(1)
        First case...
        @break

    @case(2)
        Second case...
        @break

    @default
        Default case...
@endswitch

Циклы

В дополнение к условным операторам, Blade содержит простые директивы для работы со структурами циклов PHP. Опять же, каждая из этих директив работает так же, как и их аналоги в PHP:

@for ($i = 0; $i 10; $i++)
    The current value is {{ $i }}
@endfor

@foreach ($users as $user)
    

This is user {{ $user->id }}

@endforeach @forelse ($users as $user)
  • {{ $user->name }}
  • @empty

    No users

    @endforelse @while (true)

    I'm looping forever.

    @endwhile
    При создании цикла вы можете использовать переменную Loop, чтобы получить информацию о цикле, например, находитесь ли вы в первой или последней итерации цикла.

    Вы также можете завершить цикл или пропустить текущую итерацию, используя директивы @continue и @break:

    @foreach ($users as $user)
        @if ($user->type == 1)
            @continue
        @endif
    
        
  • {{ $user->name }}
  • @if ($user->number == 5) @break @endif @endforeach

    Вы также можете включить в объявление директивы условие продолжения или прерывания:

    @foreach ($users as $user)
        @continue($user->type == 1)
    
        
  • {{ $user->name }}
  • @break($user->number == 5) @endforeach

    Переменная Loop

    Внутри цикла доступна переменная $loop. Она обеспечивает доступ к некоторой полезной информации, например, индекс текущего цикла, первая это или последняя итерация цикла:

    @foreach ($users as $user)
        @if ($loop->first)
            This is the first iteration.
        @endif
    
        @if ($loop->last)
            This is the last iteration.
        @endif
    
        

    This is user {{ $user->id }}

    @endforeach

    При нахождении во вложенном цикле, вы можете получить доступ к переменной $loop родительского цикла через свойство parent:

    @foreach ($users as $user)
        @foreach ($user->posts as $post)
            @if ($loop->parent->first)
                This is the first iteration of the parent loop.
            @endif
        @endforeach
    @endforeach
    

    Переменная $loop также содержит множество других полезных свойств:

    Свойство Описание
    $loop->index Индекс текущей итерации цикла (начинается с 0).
    $loop->iteration Текущая итерация цикла (начинается с 1).
    $loop->remaining Итерации, оставшиеся в цикле.
    $loop->count Общее количество элементов в итерируемом массиве.
    $loop->first Первая ли это итерация цикла.
    $loop->last Последняя ли это итерация цикла.
    $loop->even Четная ли это итерация цикла.
    $loop->odd Нечетная ли это итерация цикла.
    $loop->depth Уровень вложенности текущего цикла.
    $loop->parent Переменная родительского цикла во вложенном цикле.

    Комментарии

    Blade также позволяет вам определять комментарии в ваших шаблонах. Однако, в отличие от комментариев HTML, комментарии Blade не будут включены в результирующий HTML, возвращаемый вашим приложением:

    {{-- This comment will not be present in the rendered HTML --}}
    

    Подключение дочерних шаблонов

    Хотя вы можете использовать директиву @include, компоненты Blade содержат аналогичный функционал и предлагают несколько преимуществ по сравнению с директивой @include, например привязку данных и атрибутов.

    Директива @include Blade позволяет вам включать шаблоны из другого шаблона. Все переменные, доступные для родительского шаблона, будут доступны для включенного шаблона:

    div>
        @include('shared.errors')
    
        form>
            
        form>
    div>
    

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

    @include('view.name', ['status' => 'complete'])
    

    Если вы попытаетесь включить несуществующий шаблон, Laravel выдаст ошибку. Если вы хотите включить шаблон, который может присутствовать или отсутствовать, вам следует использовать директиву @includeIf:

    @includeIf('view.name', ['status' => 'complete'])
    

    Если вы хотите включить шаблон в зависимости от результата логического выражения, возвращающего либо true, либо false, то используйте директивы @includeWhen и @includeUnless:

    @includeWhen($boolean, 'view.name', ['status' => 'complete'])
    
    @includeUnless($boolean, 'view.name', ['status' => 'complete'])
    

    Чтобы включить первый существующий шаблон из переданного массива шаблонов, вы можете использовать директиву includeFirst:

    @includeFirst(['custom.admin', 'admin'], ['status' => 'complete'])
    
    Вам следует избегать использования в ваших шаблонах Blade констант __DIR__ и __FILE__, поскольку они будут ссылаться на расположение кешированного, скомпилированного шаблона.

    Отрисовка шаблонов с коллекциями

    Вы можете cкомбинировать циклы и подключение шаблона в одну строку с помощью директивы Blade @each:

    @each('view.name', $jobs, 'job')
    

    Первый аргумент директивы @each – это шаблон, отображаемый для каждого элемента в массиве или коллекции. Второй аргумент – это массив или коллекция, которую вы хотите перебрать, а третий аргумент – это имя переменной, которая будет присвоена текущей итерации в шаблоне. Так, например, если вы выполняете итерацию по массиву jobs, обычно вам нужно обращаться к каждому элементу как к переменной job в шаблоне. Ключ массива для текущей итерации будет доступен как переменная key в шаблоне.

    Вы можете передать четвертый аргумент директиве @each. Этот аргумент определяет шаблон, который будет отображаться, если переданный массив пуст.

    @each('view.name', $jobs, 'job', 'view.empty')
    
    Шаблоны, отображаемые с помощью @each, не наследуют переменные родительского шаблона. Если дочернему шаблону требуются эти переменные, вам следует использовать вместо них директивы @foreach и @include.

    Директива @once

    Директива @once позволяет вам определить часть шаблона, которая будет проанализирована только один раз за цикл визуализации. Это может быть полезно для вставки переданного фрагмента JavaScript в подвал страницы с помощью стеков. Например, если вы отображаете переданный компонент в цикле, то бывает необходимо разместить JavaScript в подвале при визуализации компонента только единожды:

    @once
        @push('scripts')
            script>
                
            script>
        @endpush
    @endonce
    

    Необработанный PHP

    В крайних ситуациях можно встроить PHP-код в ваши шаблоны. Вы можете использовать директиву @php Blade для размещения блока простого PHP в вашем шаблоне:

    @php
        $counter = 1;
    @endphp
    

    Компоненты

    Компоненты и слоты предоставляют те же преимущества, что и секции, макеты и включение шаблона из другого шаблона; однако, некоторым может быть легче понять мысленную модель компонентов и слотов. Есть два подхода к написанию компонентов: компоненты на основе классов и анонимные компоненты.

    Чтобы создать компонент на основе класса, вы можете использовать команду make:component Artisan. Чтобы проиллюстрировать, как использовать компоненты, мы создадим простой компонент Alert. Команда make:component поместит компонент в каталог app/View/Components:

    php artisan make:component Alert
    

    Команда make: component также создаст шаблон для компонента. Шаблон будет помещен в каталог resources/views/components. При написании компонентов для вашего собственного приложения компоненты автоматически обнаруживаются в каталогах app/View/Components и resources/views/components, поэтому дополнительная регистрация компонентов обычно не требуется.

    Вы также можете создавать компоненты в подкаталогах:

    php artisan make:component Forms/Input
    

    Приведенная выше команда создаст компонент Input в каталоге App\View\Components\Forms, а шаблон будет помещен в каталог resources/views/components/forms.

    Самостоятельная регистрация компонентов пакета

    При написании компонентов для вашего собственного приложения компоненты автоматически обнаруживаются в каталогах app/View/Components и resources/views/components.

    Однако, если вы создаете пакет, который использует компоненты Blade, вам необходимо вручную зарегистрировать класс компонента и его псевдоним HTML-тега. Вы должны зарегистрировать свои компоненты в методе boot поставщика служб вашего пакета:

    use Illuminate\Support\Facades\Blade;
    
    
    public function boot()
    {
        Blade::component('package-alert', Alert::class);
    }
    

    После того, как ваш компонент был зарегистрирован, он может быть отображен с использованием псевдонима тега:

    x-package-alert/>
    

    Как вариант, вы можете использовать метод componentNamespace для автоматической загрузки классов компонентов по соглашению. Например, пакет Nightshade может иметь компоненты Calendar и ColorPicker, которые находятся в пространстве имен Package\Views\Components:

    use Illuminate\Support\Facades\Blade;
    
    
    public function boot()
    {
        Blade::componentNamespace('Nightshade\\Views\\Components', 'nightshade');
    }
    

    Это позволит использовать компоненты пакета в пространстве имен их поставщиков, используя синтаксис x-package-name:::

    <:calendar><:color-picker>

    Blade автоматически обнаружит класс, связанный с этим компонентом, используя «верблюжий регистр» имени компонента. Подкаталоги также поддерживаются с использованием «точечной» нотации.

    Отрисовка компонентов

    Для отображения компонента вы можете использовать тег компонента Blade в одном из ваших шаблонов Blade. Теги компонентов Blade начинаются со строки x-, за которой следует имя в «шашлычном регистре» класса компонента:

    x-alert/>
    
    x-user-profile/>
    

    Если класс компонента имеет вложенность в каталоге app/View/Components, то вы можете использовать символ . для обозначения вложенности каталогов. Например, если мы предполагаем, что компонент находится в App\View\Components\Inputs\Button.php, то мы можем отобразить его так:

    x-inputs.button/>
    

    Передача данных компонентам

    Вы можете передавать данные в компоненты Blade, используя атрибуты HTML. Жестко запрограммированные примитивные значения могут быть переданы компоненту с помощью простых строк атрибутов HTML. Выражения и переменные PHP следует передавать компоненту через атрибуты, которые используют символ : в качестве префикса:

    x-alert type="error" :message="$message"/>
    

    Вы должны определить необходимые данные компонента в его конструкторе класса. Все общедоступные свойства компонента будут автоматически доступны в шаблоне компонента. Нет необходимости передавать данные в шаблон из метода render компонента:

    namespace App\View\Components;
    
    use Illuminate\View\Component;
    
    class Alert extends Component
    {
        
        public $type;
    
        
        public $message;
    
        
        public function __construct($type, $message)
        {
            $this->type = $type;
            $this->message = $message;
        }
    
        
        public function render()
        {
            return view('components.alert');
        }
    }
    

    Когда ваш компонент визуализируется, вы можете отображать содержимое общедоступных переменных вашего компонента, выводя переменные по имени:

    div class="alert alert-{{ $type }}">
        {{ $message }}
    div>
    

    Именование

    Аргументы конструктора компонентов следует указывать с помощью camelCase, а при обращении к именам аргументов в ваших атрибутах HTML следует использовать kebab-case. Например, учитывая следующий конструктор компонента:

    
    public function __construct($alertType)
    {
        $this->alertType = $alertType;
    }
    

    Аргумент $alertType может быть передан компоненту следующим образом:

    x-alert alert-type="danger" />
    

    Экранирование атрибутов от синтаксического анализа

    Поскольку некоторые фреймворки JavaScript, такие как Alpine.js, также используют атрибуты с префиксом двоеточия, вы можете использовать префикс с двойным двоеточием (::), чтобы сообщить Blade, что атрибут не является выражением PHP. Например, учитывая следующий компонент:

    x-button ::class="{ danger: isDeleting }">
        Submit
    x-button>
    

    Blade отобразит следующий HTML-код:

    button :class="{ danger: isDeleting }">
        Submit
    button>
    

    Методы компонента

    В дополнение к общедоступным переменным, доступным для вашего шаблона компонента, могут быть вызваны любые общедоступные методы компонента. Например, представьте компонент, у которого есть метод isSelected:

    
    public function isSelected($option)
    {
        return $option === $this->selected;
    }
    

    Вы можете выполнить этот метод из своего шаблона компонента, вызвав переменную, соответствующую имени метода:

    Доступ к атрибутам и слотам в классах компонентов

    Компоненты Blade также позволяют получить доступ к имени компонента, атрибутам и слоту внутри метода render класса. Однако, чтобы получить доступ к этим данным, вы должны вернуть замыкание из метода render вашего компонента. Замыкание получит массив $data в качестве единственного аргумента. Этот массив будет содержать несколько элементов, предоставляющих информацию о компоненте:

    
    public function render()
    {
        return function (array $data) {
            
            
            
    
            return '
    Components content
    '
    ; }; }

    componentName эквивалентно имени, используемому в HTML-теге после префикса x-. Таким образом, componentName компонента будет alert. Элемент attributes будет содержать все атрибуты, которые присутствовали в HTML-теге. Элемент slot – это экземпляр Illuminate\Support\HtmlString с содержимым слота компонента.

    Замыкание должно возвращать строку. Если возвращенная строка соответствует существующему шаблону, то этот шаблон будет отрисован; в противном случае возвращенная строка будет оцениваться как встроенный шаблон Blade.

    Дополнительные зависимости

    Если вашему компоненту требуются зависимости из контейнера служб Laravel, то вы можете указать их перед любыми атрибутами данных компонента, и они будут автоматически внедрены контейнером:

    use App\Services\AlertCreator
    
    /**
     * Создать экземпляр компонента.
     *
     * @param  \App\Services\AlertCreator  $creator
     * @param  string  $type
     * @param  string  $message
     * @return void
     */
    public function __construct(AlertCreator $creator, $type, $message)
    {
        $this->creator = $creator;
        $this->type = $type;
        $this->message = $message;
    }
    

    Скрытие атрибутов / методов

    Если вы хотите, чтобы некоторые публичные методы или свойства не использовались как переменные в шаблоне компонента, вы можете добавить их в свойство массива $except в вашем компоненте:

    namespace App\View\Components;
    
    use Illuminate\View\Component;
    
    class Alert extends Component
    {
        
        public $type;
    
        
        protected $except = ['type'];
    }
    

    Атрибуты компонента

    Мы уже рассмотрели, как передавать атрибуты данных в компонент; иногда требуется указать дополнительные атрибуты HTML, такие как class, которые не являются частью данных, необходимых для функционирования компонента. Как правило, вы хотите передать эти дополнительные атрибуты корневому элементу шаблона компонента. Например, представьте, что мы хотим отобразить компонент alert следующим образом:

    x-alert type="error" :message="$message" class="mt-4"/>
    

    Все атрибуты, которые не являются частью конструктора компонента, будут автоматически добавлены в «коллекцию атрибутов» компонента. Эта коллекция атрибутов автоматически становится доступной для компонента через переменную $attributes. Все атрибуты могут отображаться в компоненте путем вывода этой переменной:

    div {{ $attributes }}>
        
    div>
    
    Использование таких директив, как @env в тегах компонентов в настоящее время не поддерживается. Например, не будет компилироваться.

    Атрибуты по умолчанию и слияние атрибутов

    Иногда требуется указать значения по умолчанию для атрибутов или добавить дополнительные значения в некоторые атрибуты компонента. Для этого вы можете использовать метод merge коллекции атрибутов. Этот метод особенно полезен для определения набора CSS-классов по умолчанию, которые всегда должны применяться к компоненту:

    merge(['class' => 'alert alert-'.$type]) }}> {{ $message }}

    Если предположить,

    x-alert type="error" :message="$message" class="mb-4"/>
    

    Окончательный обработанный HTML-код компонента будет выглядеть следующим образом:

    div class="alert alert-error mb-4">
        
    div>
    

    Условное слияние классов

    По желанию можно объединить классы, если указанное условие истинно. Вы можете сделать это с помощью метода class, который принимает массив классов, где ключ массива содержит класс или классы, которые вы хотите добавить, а значение является логическим выражением. Если элемент массива имеет числовой ключ, то он всегда будет добавлен в конечный список классов:

    class(['p-4', 'bg-red' => $hasError]) }}> {{ $message }}

    Если вам нужно объединить другие атрибуты в свой компонент, вы можете связать метод merge с методом class:

    
    

    Слияние неклассовых атрибутов

    При слиянии атрибутов, которые не являются атрибутами класса, значения, предоставленные методу merge, будут считаться значениями атрибута по умолчанию. Однако, в отличие от атрибута class, эти атрибуты не будут объединены с указанными значениями атрибутов. Вместо этого они будут перезаписаны. Например, реализация компонента button может выглядеть следующим образом:

    
    

    Чтобы отобразить компонент кнопки с настраиваемым type, его можно указать при использовании компонента. Если тип не указан, будет использоваться тип button, определенный по умолчанию:

    x-button type="submit">
        Submit
    x-button>
    

    Обработанный HTML-код компонента button в этом примере будет:

    button type="submit">
        Submit
    button>
    

    Если вы хотите, чтобы атрибут, отличный от class, имел значение по умолчанию и указанное значение, объединенные вместе, вы можете использовать метод prepends. В этом примере атрибут data-controller всегда будет начинаться с profile-controller, а любые дополнительные указанные значения data-controller будут помещены после этого значения по умолчанию:

    merge(['data-controller' => $attributes->prepends('profile-controller')]) }}> {{ $slot }}

    Получение и фильтрация атрибутов

    Вы можете фильтровать атрибуты, используя метод filter. Этот метод принимает замыкание, которое должно возвращать true, если вы хотите сохранить атрибут в коллекции атрибутов:

    {{ $attributes->filter(fn ($value, $key) => $key == 'foo') }}
    

    Для удобства вы можете использовать метод whereStartsWith для получения всех атрибутов, ключи которых начинаются с указанной строки:

    {{ $attributes->whereStartsWith('wire:model') }}
    

    И наоборот, метод whereDoesntStartWith может быть использован для исключения всех атрибутов, ключи которых начинаются с указанной строки:

    {{ $attributes->whereDoesntStartWith('wire:model') }}    
    

    Используя метод first, вы можете отобразить первый атрибут в указанной коллекции атрибутов:

    {{ $attributes->whereStartsWith('wire:model')->first() }}
    

    Если вы хотите проверить, присутствует ли атрибут в компоненте, вы можете использовать метод has. Этот метод принимает имя атрибута в качестве единственного аргумента и возвращает логическое значение, указывающее, присутствует ли атрибут:

    @if ($attributes->has('class'))
        
    Class attribute is presentdiv> @endif

    Вы можете получить значение конкретного атрибута, используя метод get:

    {{ $attributes->get('class') }}
    

    Зарезервированные ключевые слова

    По умолчанию некоторые ключевые слова зарезервированы для внутреннего использования Blade при визуализации компонентов. Следующие ключевые слова не могут быть определены как публичные свойства или имена методов в ваших компонентах:

    • data
    • render
    • resolveView
    • shouldRender
    • view
    • withAttributes
    • withName

    Слоты

    Вам часто потребуется передавать дополнительный контент вашему компоненту через «слоты». Слоты компонентов отображаются путем вывода переменной $slot. Чтобы изучить эту концепцию, представим, что компонент alert имеет следующую разметку:

    
    
    div class="alert alert-danger">
        {{ $slot }}
    div>
    

    Мы можем передавать контент в slot, вставив контент в компонент:

    x-alert>
        strong>Whoops!strong> Something went wrong!
    x-alert>
    

    Иногда компоненту может потребоваться отрисовать несколько разных слотов в разных местах внутри компонента. Давайте модифицируем наш компонент оповещения, чтобы учесть вставку слота title:

    
    
    span class="alert-title">{{ $title }}span>
    
    div class="alert alert-danger">
        {{ $slot }}
    div>
    

    Вы можете определить содержимое именованнго слота с помощью тега x-slot. Любой контент, не указанный в явном теге x-slot, будет передан компоненту в переменной $slot:

    x-alert>
        x-slot name="title">
            Server Error
        x-slot>
    
        strong>Whoops!strong> Something went wrong!
    x-alert>
    

    Слоты с ограниченной областью видимости

    Если вы использовали фреймворк JavaScript, такой как Vue, то вы, возможно, знакомы со «слотами с ограниченной областью видимости», которые позволяют получать доступ к данным или методам из компонента в вашем слоте. Вы можете добиться аналогичного поведения в Laravel, определив общедоступные методы или свойства в вашем компоненте и получив доступ к компоненту в вашем слоте через переменную $component. В этом примере мы предположим, что компонент x-alert имеет общедоступный метод formatAlert, определенный в его классе компонента:

    x-alert>
        x-slot name="title">
            {{ $component->formatAlert('Server Error') }}
        x-slot>
    
        strong>Whoops!strong> Something went wrong!
    x-alert>
    

    Встроенные шаблоны компонентов

    Для очень маленьких компонентов может показаться обременительным управлять как классом компонента, так и шаблоном компонента. По этой причине вы можете вернуть разметку компонента прямо из метода render:

    
    public function render()
    {
        return 
                {{ $slot }}
            
    blade; }

    Генерация компонентов со встроенными шаблонами

    Чтобы создать компонент, который использует встроенный шаблон, вы можете использовать параметр --inline при выполнении команды make:component:

    php artisan make:component Alert --inline
    

    Анонимные компоненты

    Подобно встроенным компонентам, анонимные компоненты предоставляют механизм для управления компонентом через один файл. Однако анонимные компоненты используют один файл шаблона, но не имеют связанного с компонентом класса. Чтобы определить анонимный компонент, вам нужно только разместить шаблон Blade в вашем каталоге resources/views/components. Например, если вы определили компонент в resources/views/components/alert.blade.php, вы можете просто отобразить его так:

    x-alert/>
    

    Вы можете использовать символ ., чтобы указать, вложен ли компонент в каталоге components. Например, если компонент определен в resources/views/components/inputs/button.blade.php, вы можете отобразить его так:

    x-inputs.button/>
    

    Свойства / атрибуты данных

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

    Вы можете указать, какие атрибуты следует рассматривать как переменные данных, используя директиву @props в верхней части шаблона Blade вашего компонента. Все остальные атрибуты компонента будут доступны через коллекцию атрибутов компонента. Если вы хотите присвоить переменной данных значение по умолчанию, вы можете указать имя переменной в качестве ключа массива и значение по умолчанию в качестве значения массива:

    
    
    @props(['type' => 'info', 'message'])
    
    div {{ $attributes->merge(['class' => 'alert alert-'.$type]) }}>
        {{ $message }}
    div>
    

    Учитывая приведенное выше определение компонента, мы можем отобразить компонент следующим образом:

    x-alert type="error" :message="$message" class="mb-4"/>
    

    Динамические компоненты

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

    x-dynamic-component :component="$componentName" class="mt-4" />
    

    Самостоятельная регистрация компонентов

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

    При написании компонентов для вашего собственного приложения компоненты автоматически обнаруживаются в каталогах app/View/Components и resources/views/components.

    Однако, если вы создаете пакет, который использует компоненты Blade или размещаете компоненты в других каталогах, вам необходимо самостоятельно зарегистрировать класс компонента и его псевдоним HTML-тега, чтобы Laravel знал, где найти компонент. Вы должны зарегистрировать свои компоненты в методе boot поставщика служб вашего пакета:

    use Illuminate\Support\Facades\Blade;
    use VendorPackage\View\Components\AlertComponent;
    
    
    public function boot()
    {
        Blade::component('package-alert', AlertComponent::class);
    }
    

    После того, как ваш компонент был зарегистрирован, он может быть отображен с использованием псевдонима тега:

    x-package-alert/>
    

    Автозагрузка компонентов пакета

    Как вариант, вы можете использовать метод componentNamespace для автоматической загрузки классов компонентов по соглашению. Например, пакет Nightshade может иметь компоненты Calendar и ColorPicker, которые находятся в пространстве имен Package\Views\Components:

    use Illuminate\Support\Facades\Blade;
    
    
    public function boot()
    {
        Blade::componentNamespace('Nightshade\\Views\\Components', 'nightshade');
    }
    

    Это позволит использовать компоненты пакета в пространстве имен их поставщиков, используя синтаксис x-package-name:::

    <:calendar><:color-picker>

    Blade автоматически обнаружит класс, связанный с этим компонентом, используя «верблюжий регистр» имени компонента. Подкаталоги также поддерживаются с использованием «точечной» нотации.

    Создание макетов

    Макеты с использованием компонентов

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

    Определение компонента макета

    Например, представьте, что мы создаем приложение со списком задач. Мы могли бы определить компонент layout, который выглядит следующим образом:

    
    
    html>
    head>
        title>{{ $title ?? 'Todo Manager' }}title>
    head>
    body>
        h1>Todosh1>
        hr/>
        {{ $slot }}
    body>
    html>
    

    Использование компонента макета

    Как только компонент layout определен, мы можем создать шаблон Blade, который будет использовать этот компонент. В этом примере мы определим простой шаблон, который отображает наш список задач:

    
    
    x-layout>
    @foreach ($tasks as $task)
        {{ $task }}
    @endforeach
    x-layout>
    

    Помните, что содержимое, внедренное в компонент, по умолчанию будет передано переменной $slot компонента layout. Как вы могли заметить, наш layout также учитывает слот $title, если он предусмотрен; в противном случае отображается заголовок по умолчанию. Мы можем добавить другой заголовок из нашего шаблона списка задач, используя стандартный синтаксис слотов, описанный в документации по компонентам:

    
    
    x-layout>
    x-slot name="title">
        Custom Title
    x-slot>
    
    @foreach ($tasks as $task)
        {{ $task }}
    @endforeach
    x-layout>
    

    Теперь, когда мы определили наш макет и шаблоны списка задач, нам просто нужно вернуть представление task из маршрута:

    use App\Models\Task;

    Route::get('/tasks', function () { return view('tasks', ['tasks' => Task::all()]); });

    Макеты с использованием наследования шаблонов

    Определение макета

    Макеты также могут быть созданы с помощью «наследования шаблонов». Это был основной способ создания приложений до появления компонентов.

    Для начала рассмотрим простой пример. Сначала мы изучим макет страницы. Поскольку большинство веб-приложений поддерживают одинаковый общий макет на разных страницах, удобно определить этот макет как единый шаблон Blade:

    
    
    html>
    head>
        title>App Name - @yield('title')title>
    head>
    body>
        @section('sidebar')
            This is the master sidebar.
        @show
    
        div class="container">
            @yield('content')
        div>
    body>
    html>
    

    Как видите, этот файл содержит типичную разметку HTML. Однако, обратите внимание на директивы @section и @yield. Директива @section, как следует из названия, определяет секцию содержимого, тогда как директива @yield используется для отображения содержимого секции, предоставленного дочерним шаблоном.

    Теперь, когда мы определили макет для нашего приложения, давайте определим дочернюю страницу, которая наследует макет.

    Расширение макета

    При определении дочернего шаблона используйте директиву Blade @extends, чтобы указать, какой макет дочерний шаблон должен «наследовать». Шаблоны, расширяющие макет Blade, могут добавлять содержимое в секции макета с помощью директив @section. Помните, как видно из приведенного выше примера, содержимое этих секций будет отображаться в макете с помощью @yield:

    
    
    @extends('layouts.app')
    
    @section('title', 'Page Title')
    
    @section('sidebar')
    @parent
    
    p>This is appended to the master sidebar.p>
    @endsection
    
    @section('content')
    p>This is my body content.p>
    @endsection
    

    В этом примере секция sidebar использует директиву @parent для добавления (а не перезаписи) содержимого к боковой панели макета. Директива @parent будет заменена содержимым макета при визуализации представления.

    В отличие от предыдущего примера, нынешняя секция sidebar заканчивается @endsection вместо @show. Директива @endsection будет только определять секцию, в то время как @show будет определять и немедленно дополнять секцию.

    Директива @yield также принимает значение по умолчанию в качестве второго параметра. Это значение будет отображено, если дополняемый раздел не определен:

    @yield('content', 'Default content')

    Формы

    Поле CSRF

    Каждый раз, когда вы определяете HTML-форму в своем приложении, вы должны включать в форму скрытое поле токена CSRF, чтобы посредник защиты от CSRF мог провалидировать запрос. Вы можете использовать директиву @csrf Blade для генерации поля токена:

    form method="POST" action="/profile">
    @csrf
    
    ...
    form>
    

    Поле Method

    Поскольку HTML-формы не могут выполнять запросы PUT, PATCH или DELETE, вам нужно будет добавить скрытое поле _method, чтобы подменить эти HTTP-методы. Директива @method Blade поможет создать для вас такое поле:

    form action="/foo/bar" method="POST">
    @method('PUT')
    
    ...
    form>
    

    Ошибки валидации

    Директива @error используется для быстрой проверки наличия сообщений об ошибках валидации для конкретного атрибута. В директиве @error вы можете вывести содержимое переменной $message для отображения сообщения об ошибке:

    
    
    label for="title">Post Titlelabel>
    
    input id="title" type="text" class="@error('title') is-invalid @enderror">
    
    @error('title')
    div class="alert alert-danger">{{ $message }}div>
    @enderror
    

    Вы можете передать имя конкретной коллекции ошибок в качестве второго параметра директивы @error для получения сообщений об ошибках валидации на страницах, содержащих несколько форм:

    
    
    label for="email">Email addresslabel>
    
    input id="email" type="email" class="@error('email', 'login') is-invalid @enderror">
    
    @error('email', 'login')
    div class="alert alert-danger">{{ $message }}div>
    @enderror
    

    Стеки

    Blade позволяет вам добавлять содержимое к именованным стекам, которые можно отобразить где-нибудь еще в другом шаблоне или макете. Это может быть особенно полезно для указания любых библиотек JavaScript, необходимых для ваших дочерних шаблонов:

    @push('scripts')
        script src="/example.js">script>
    @endpush
    

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

    head>
        
    
        @stack('scripts')
    head>
    

    Если вы хотите добавить содержимое в начало стека, вы должны использовать директиву @prepend:

    @push('scripts')
        This will be second...
    @endpush
    
    // Later...
    
    @prepend('scripts')
        This will be first...
    @endprepend
    

    Внедрение служб

    Директива @inject используется для извлечения службы из контейнера служб Laravel. Первый аргумент, переданный в @inject, – это имя переменной, в которую будет помещена служба, а второй аргумент – это имя класса или интерфейса службы, которую вы хотите извлечь:

    @inject('metrics', 'App\Services\MetricsService')
    
    div>
        Monthly Revenue: {{ $metrics->monthlyRevenue() }}.
    div>
    

    Введение

    Laravel содержит множество глобальных «вспомогательных» функций PHP. Многие из этих функций используются самим фреймворком; однако, вы можете использовать их в своих собственных приложениях, если сочтете их удобными.

    Доступные методы

    Массивы и объекты

    • Arr::accessible
    • Arr::add
    • Arr::collapse
    • Arr::crossJoin
    • Arr::divide
    • Arr::dot
    • Arr::except
    • Arr::exists
    • Arr::first
    • Arr::flatten
    • Arr::forget
    • Arr::get
    • Arr::has
    • Arr::hasAny
    • Arr::isAssoc
    • Arr::last
    • Arr::only
    • Arr::pluck
    • Arr::prepend
    • Arr::pull
    • Arr::query
    • Arr::random
    • Arr::set
    • Arr::shuffle
    • Arr::sort
    • Arr::sortRecursive
    • Arr::where
    • Arr::wrap
    • data_fill
    • data_get
    • data_set
    • head
    • last

    Пути

    • app_path
    • base_path
    • config_path
    • database_path
    • mix
    • public_path
    • resource_path
    • storage_path

    Строки

    • __
    • class_basename
    • e
    • preg_replace_array
    • Str::after
    • Str::afterLast
    • Str::ascii
    • Str::before
    • Str::beforeLast
    • Str::between
    • Str::camel
    • Str::contains
    • Str::containsAll
    • Str::endsWith
    • Str::finish
    • Str::is
    • Str::isAscii
    • Str::isUuid
    • Str::kebab
    • Str::length
    • Str::limit
    • Str::lower
    • Str::markdown
    • Str::orderedUuid
    • Str::padBoth
    • Str::padLeft
    • Str::padRight
    • Str::plural
    • Str::pluralStudly
    • Str::random
    • Str::remove
    • Str::replace
    • Str::replaceArray
    • Str::replaceFirst
    • Str::replaceLast
    • Str::singular
    • Str::slug
    • Str::snake
    • Str::start
    • Str::startsWith
    • Str::studly
    • Str::substr
    • Str::substrCount
    • Str::title
    • Str::ucfirst
    • Str::upper
    • Str::uuid
    • Str::wordCount
    • Str::words
    • trans
    • trans_choice

    Строки Fluent

    Строки Fluent обеспечивают более гибкий объектно-ориентированный интерфейс для работы со строковыми значениями, позволяя объединять несколько строковых операций вместе с использованием более удобочитаемого синтаксиса по сравнению с традиционными строковыми операциями.

    • after
    • afterLast
    • append
    • ascii
    • basename
    • before
    • beforeLast
    • camel
    • contains
    • containsAll
    • dirname
    • endsWith
    • exactly
    • explode
    • finish
    • is
    • isAscii
    • isEmpty
    • isNotEmpty
    • kebab
    • length
    • limit
    • lower
    • ltrim
    • markdown
    • match
    • matchAll
    • padBoth
    • padLeft
    • padRight
    • pipe
    • plural
    • prepend
    • remove
    • replace
    • replaceArray
    • replaceFirst
    • replaceLast
    • replaceMatches
    • rtrim
    • singular
    • slug
    • snake
    • split
    • start
    • startsWith
    • studly
    • substr
    • tap
    • test
    • title
    • trim
    • ucfirst
    • upper
    • when
    • whenEmpty
    • words

    URL-адреса

    • action
    • asset
    • route
    • secure_asset
    • secure_url
    • url

    Разное

    • abort
    • abort_if
    • abort_unless
    • app
    • auth
    • back
    • bcrypt
    • blank
    • broadcast
    • cache
    • class_uses_recursive
    • collect
    • config
    • cookie
    • csrf_field
    • csrf_token
    • dd
    • dispatch
    • dump
    • env
    • event
    • filled
    • info
    • logger
    • method_field
    • now
    • old
    • optional
    • policy
    • redirect
    • report
    • request
    • rescue
    • resolve
    • response
    • retry
    • session
    • tap
    • throw_if
    • throw_unless
    • today
    • trait_uses_recursive
    • transform
    • validator
    • value
    • view
    • with

    Список методов

    Массивы и объекты

    Arr::accessible()

    Метод Arr::accessible определяет, доступно ли переданное значение массиву:

    use Illuminate\Support\Arr;
    use Illuminate\Support\Collection;
    
    $isAccessible = Arr::accessible(['a' => 1, 'b' => 2]);
    
    
    
    $isAccessible = Arr::accessible(new Collection);
    
    
    
    $isAccessible = Arr::accessible('abc');
    
    
    
    $isAccessible = Arr::accessible(new stdClass);
    
    
    

    Arr::add()

    Метод Arr::add добавляет переданную пару ключ / значение в массив, если указанный ключ еще не существует в массиве или установлен как null:

    use Illuminate\Support\Arr;
    
    $array = Arr::add(['name' => 'Desk'], 'price', 100);
    
    
    
    $array = Arr::add(['name' => 'Desk', 'price' => null], 'price', 100);
    
    
    

    Arr::collapse()

    Метод Arr::collapse сворачивает массив массивов в один массив:

    use Illuminate\Support\Arr;
    
    $array = Arr::collapse([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
    
    
    

    Arr::crossJoin()

    Метод Arr::crossJoin перекрестно соединяет указанные массивы, возвращая декартово произведение со всеми возможными перестановками:

    use Illuminate\Support\Arr;
    
    $matrix = Arr::crossJoin([1, 2], ['a', 'b']);
    
    
    
    $matrix = Arr::crossJoin([1, 2], ['a', 'b'], ['I', 'II']);
    
    
    

    Arr::divide()

    Метод Arr::divide возвращает два массива: один содержит ключи, а другой – значения переданного массива:

    use Illuminate\Support\Arr;
    
    [$keys, $values] = Arr::divide(['name' => 'Desk']);
    
    
    
    
    

    Arr::dot()

    Метод Arr::dot объединяет многомерный массив в одноуровневый, использующий «точечную нотацию» для обозначения глубины:

    use Illuminate\Support\Arr;
    
    $array = ['products' => ['desk' => ['price' => 100]]];
    
    $flattened = Arr::dot($array);
    
    
    

    Arr::except()

    Метод Arr::except удаляет переданные пары ключ / значение из массива:

    use Illuminate\Support\Arr;
    
    $array = ['name' => 'Desk', 'price' => 100];
    
    $filtered = Arr::except($array, ['price']);
    
    
    

    Arr::exists()

    Метод Arr::exists проверяет, существует ли переданный ключ в указанном массиве:

    use Illuminate\Support\Arr;
    
    $array = ['name' => 'John Doe', 'age' => 17];
    
    $exists = Arr::exists($array, 'name');
    
    
    
    $exists = Arr::exists($array, 'salary');
    
    
    

    Arr::first()

    Метод Arr::first возвращает первый элемент массива, прошедший тест переданного замыкания на истинность:

    use Illuminate\Support\Arr;
    
    $array = [100, 200, 300];
    
    $first = Arr::first($array, function ($value, $key) {
        return $value >= 150;
    });
    
    
    

    Значение по умолчанию может быть передано в качестве третьего аргумента методу. Это значение будет возвращено, если ни одно из значений не пройдет проверку на истинность:

    use Illuminate\Support\Arr;
    
    $first = Arr::first($array, $callback, $default);
    

    Arr::flatten()

    Метод Arr::flatten объединяет многомерный массив в одноуровневый:

    use Illuminate\Support\Arr;
    
    $array = ['name' => 'Joe', 'languages' => ['PHP', 'Ruby']];
    
    $flattened = Arr::flatten($array);
    
    
    

    Arr::forget()

    Метод Arr::forget удаляет переданную пару ключ / значение из глубоко вложенного массива, используя «точечную нотацию»:

    use Illuminate\Support\Arr;
    
    $array = ['products' => ['desk' => ['price' => 100]]];
    
    Arr::forget($array, 'products.desk');
    
    
    

    Arr::get()

    Метод Arr::get извлекает значение из глубоко вложенного массива, используя «точечную нотацию»:

    use Illuminate\Support\Arr;
    
    $array = ['products' => ['desk' => ['price' => 100]]];
    
    $price = Arr::get($array, 'products.desk.price');
    
    
    

    Метод Arr::get также принимает значение по умолчанию, которое будет возвращено, если указанный ключ отсутствует в массиве:

    use Illuminate\Support\Arr;
    
    $discount = Arr::get($array, 'products.desk.discount', 0);
    
    
    

    Arr::has()

    Метод Arr::has проверяет, существует ли переданный элемент или элементы в массиве, используя «точечную нотацию»:

    use Illuminate\Support\Arr;
    
    $array = ['product' => ['name' => 'Desk', 'price' => 100]];
    
    $contains = Arr::has($array, 'product.name');
    
    
    
    $contains = Arr::has($array, ['product.price', 'product.discount']);
    
    
    

    Arr::hasAny()

    Метод Arr::hasAny проверяет, существует ли какой-либо элемент в переданном наборе в массиве, используя «точечную нотацию»:

    use Illuminate\Support\Arr;
    
    $array = ['product' => ['name' => 'Desk', 'price' => 100]];
    
    $contains = Arr::hasAny($array, 'product.name');
    
    
    
    $contains = Arr::hasAny($array, ['product.name', 'product.discount']);
    
    
    
    $contains = Arr::hasAny($array, ['category', 'product.discount']);
    
    
    

    Arr::isAssoc()

    Метод Arr::isAssoc возвращает true, если переданный массив является ассоциативным. Массив считается ассоциативным, если в нем нет последовательных цифровых ключей, начинающихся с нуля:

    use Illuminate\Support\Arr;
    
    $isAssoc = Arr::isAssoc(['product' => ['name' => 'Desk', 'price' => 100]]);
    
    
    
    $isAssoc = Arr::isAssoc([1, 2, 3]);
    
    
    

    Arr::last()

    Метод Arr::last возвращает последний элемент массива, прошедший тест переданного замыкания на истинность:

    use Illuminate\Support\Arr;
    
    $array = [100, 200, 300, 110];
    
    $last = Arr::last($array, function ($value, $key) {
        return $value >= 150;
    });
    
    
    

    Значение по умолчанию может быть передано в качестве третьего аргумента методу. Это значение будет возвращено, если ни одно из значений не пройдет проверку на истинность:

    use Illuminate\Support\Arr;
    
    $last = Arr::last($array, $callback, $default);
    

    Arr::only()

    Метод Arr::only возвращает только указанные пары ключ / значение из переданного массива:

    use Illuminate\Support\Arr;
    
    $array = ['name' => 'Desk', 'price' => 100, 'orders' => 10];
    
    $slice = Arr::only($array, ['name', 'price']);
    
    
    

    Arr::pluck()

    Метод Arr::pluck извлекает все значения для указанного ключа из массива:

    use Illuminate\Support\Arr;
    
    $array = [
        ['developer' => ['id' => 1, 'name' => 'Taylor']],
        ['developer' => ['id' => 2, 'name' => 'Abigail']],
    ];
    
    $names = Arr::pluck($array, 'developer.name');
    
    
    

    Вы также можете задать ключ результирующего списка:

    use Illuminate\Support\Arr;
    
    $names = Arr::pluck($array, 'developer.name', 'developer.id');
    
    
    

    Arr::prepend()

    Метод Arr::prepend помещает элемент в начало массива:

    use Illuminate\Support\Arr;
    
    $array = ['one', 'two', 'three', 'four'];
    
    $array = Arr::prepend($array, 'zero');
    
    
    

    При необходимости вы можете указать ключ, который следует использовать для значения:

    use Illuminate\Support\Arr;
    
    $array = ['price' => 100];
    
    $array = Arr::prepend($array, 'Desk', 'name');
    
    
    

    Arr::pull()

    Метод Arr::pull возвращает и удаляет пару ключ / значение из массива:

    use Illuminate\Support\Arr;
    
    $array = ['name' => 'Desk', 'price' => 100];
    
    $name = Arr::pull($array, 'name');
    
    
    
    
    

    Значение по умолчанию может быть передано в качестве третьего аргумента методу. Это значение будет возвращено, если ключ не существует:

    use Illuminate\Support\Arr;
    
    $value = Arr::pull($array, $key, $default);
    

    Arr::query()

    Метод Arr::query преобразует массив в строку запроса:

    use Illuminate\Support\Arr;
    
    $array = [
        'name' => 'Taylor',
        'order' => [
            'column' => 'created_at',
            'direction' => 'desc'
        ]
    ];
    
    Arr::query($array);
    
    
    

    Arr::random()

    Метод Arr::random возвращает случайное значение из массива:

    use Illuminate\Support\Arr;
    
    $array = [1, 2, 3, 4, 5];
    
    $random = Arr::random($array);
    
    
    

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

    use Illuminate\Support\Arr;
    
    $items = Arr::random($array, 2);
    
    
    

    Arr::set()

    Метод Arr::set устанавливает значение с помощью «точечной нотации» во вложенном массиве:

    use Illuminate\Support\Arr;
    
    $array = ['products' => ['desk' => ['price' => 100]]];
    
    Arr::set($array, 'products.desk.price', 200);
    
    
    

    Arr::shuffle()

    Метод Arr::shuffle случайным образом перемешивает элементы в массиве:

    use Illuminate\Support\Arr;
    
    $array = Arr::shuffle([1, 2, 3, 4, 5]);
    
    
    

    Arr::sort()

    Метод Arr::sort сортирует массив по его значениям:

    use Illuminate\Support\Arr;
    
    $array = ['Desk', 'Table', 'Chair'];
    
    $sorted = Arr::sort($array);
    
    
    

    Вы также можете отсортировать массив по результатам переданного замыкания:

    use Illuminate\Support\Arr;
    
    $array = [
        ['name' => 'Desk'],
        ['name' => 'Table'],
        ['name' => 'Chair'],
    ];
    
    $sorted = array_values(Arr::sort($array, function ($value) {
        return $value['name'];
    }));
    
    
    

    Arr::sortRecursive()

    Метод Arr::sortRecursive рекурсивно сортирует массив с помощью метода sort для числовых подмассивов и ksort для ассоциативных подмассивов:

    use Illuminate\Support\Arr;
    
    $array = [
        ['Roman', 'Taylor', 'Li'],
        ['PHP', 'Ruby', 'JavaScript'],
        ['one' => 1, 'two' => 2, 'three' => 3],
    ];
    
    $sorted = Arr::sortRecursive($array);
    
    
    

    Arr::where()

    Метод Arr::where фильтрует массив, используя переданное замыкание:

    use Illuminate\Support\Arr;
    
    $array = [100, '200', 300, '400', 500];
    
    $filtered = Arr::where($array, function ($value, $key) {
        return is_string($value);
    });
    
    
    

    Arr::wrap()

    Метод Arr::wrap оборачивает переданное значение в массив. Если переданное значение уже является массивом, то оно будет возвращено без изменений:

    use Illuminate\Support\Arr;
    
    $string = 'Laravel';
    
    $array = Arr::wrap($string);
    
    
    

    Если переданное значение равно null, то будет возвращен пустой массив:

    use Illuminate\Support\Arr;
    
    $array = Arr::wrap(null);
    
    
    

    data_fill()

    Функция data_fill устанавливает отсутствующее значение с помощью «точечной нотации» во вложенном массиве или объекте:

    $data = ['products' => ['desk' => ['price' => 100]]];
    
    data_fill($data, 'products.desk.price', 200);
    
    
    
    data_fill($data, 'products.desk.discount', 10);
    
    
    

    Допускается использование метасимвола подстановки *:

    $data = [
        'products' => [
            ['name' => 'Desk 1', 'price' => 100],
            ['name' => 'Desk 2'],
        ],
    ];
    
    data_fill($data, 'products.*.price', 200);
    
    
    

    data_get()

    Функция data_get возвращает значение с помощью «точечной нотации» из вложенного массива или объекта:

    $data = ['products' => ['desk' => ['price' => 100]]];
    
    $price = data_get($data, 'products.desk.price');
    
    
    

    Функция data_get также принимает значение по умолчанию, которое будет возвращено, если указанный ключ не найден:

    $discount = data_get($data, 'products.desk.discount', 0);
    
    
    

    Допускается использование метасимвола подстановки *, предназначенный для любого ключа массива или объекта:

    $data = [
        'product-one' => ['name' => 'Desk 1', 'price' => 100],
        'product-two' => ['name' => 'Desk 2', 'price' => 150],
    ];
    
    data_get($data, '*.name');
    
    
    

    data_set()

    Функция data_set устанавливает значение с помощью «точечной нотации» во вложенном массиве или объекте:

    $data = ['products' => ['desk' => ['price' => 100]]];
    
    data_set($data, 'products.desk.price', 200);
    
    
    

    Допускается использование метасимвола подстановки *:

    $data = [
        'products' => [
            ['name' => 'Desk 1', 'price' => 100],
            ['name' => 'Desk 2', 'price' => 150],
        ],
    ];
    
    data_set($data, 'products.*.price', 200);
    
    
    

    По умолчанию все существующие значения перезаписываются. Если вы хотите, чтобы значение было установлено только в том случае, если оно не существует, вы можете передать false в качестве четвертого аргумента:

    $data = ['products' => ['desk' => ['price' => 100]]];
    
    data_set($data, 'products.desk.price', 200, $overwrite = false);
    
    
    

    head()

    Функция head возвращает первый элемент переданного массива:

    $array = [100, 200, 300];
    
    $first = head($array);
    
    
    

    last()

    Функция last возвращает последний элемент переданного массива:

    $array = [100, 200, 300];
    
    $last = last($array);
    
    
    

    Пути

    app_path()

    Функция app_path возвращает полный путь к каталогу вашего приложения app. Вы также можете использовать функцию app_path для создания полного пути к файлу относительно каталога приложения:

    $path = app_path();
    
    $path = app_path('Http/Controllers/Controller.php');
    

    base_path()

    Функция base_path возвращает полный путь к корневому каталогу вашего приложения. Вы также можете использовать функцию base_path для генерации полного пути к заданному файлу относительно корневого каталога проекта:

    $path = base_path();
    
    $path = base_path('vendor/bin');
    

    config_path()

    Функция config_path возвращает полный путь к каталогу config вашего приложения. Вы также можете использовать функцию config_path для создания полного пути к заданному файлу в каталоге конфигурации приложения:

    $path = config_path();
    
    $path = config_path('app.php');
    

    database_path()

    Функция database_path возвращает полный путь к каталогу database вашего приложения. Вы также можете использовать функцию database_path для генерации полного пути к заданному файлу в каталоге базы данных:

    $path = database_path();
    
    $path = database_path('factories/UserFactory.php');
    

    mix()

    Функция mix возвращает путь к версионированному файлу Mix:

    $path = mix('css/app.css');
    

    public_path()

    Функция public_path возвращает полный путь к каталогу public вашего приложения. Вы также можете использовать функцию public_path для генерации полного пути к заданному файлу в публичном каталоге:

    $path = public_path();
    
    $path = public_path('css/app.css');
    

    resource_path()

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

    $path = resource_path();
    
    $path = resource_path('sass/app.scss');
    

    storage_path()

    Функция storage_path возвращает полный путь к каталогу storage вашего приложения. Вы также можете использовать функцию storage_path для генерации полного пути к заданному файлу в каталоге хранилища:

    $path = storage_path();
    
    $path = storage_path('app/file.txt');
    

    Строки

    __()

    Функция __ переводит переданную строку перевода или ключ перевода, используя ваши файлы локализации:

    echo __('Welcome to our application');
    
    echo __('messages.welcome');
    

    Если указанная строка перевода или ключ не существует, то функция __ вернет переданное значение. Итак, используя приведенный выше пример, функция __ вернет messages.welcome, если этот ключ перевода не существует.

    class_basename()

    Функция class_basename возвращает имя переданного класса с удаленным пространством имен этого класса:

    $class = class_basename('Foo\Bar\Baz');
    
    
    

    e()

    Функция e запускает PHP-функцию htmlspecialchars с параметром double_encode, установленным по умолчанию в true:

    echo e('html>foohtml>');
    
    // <html>foo</html>
    

    preg_replace_array()

    Функция preg_replace_array последовательно заменяет переданный шаблон в строке, используя массив:

    $string = 'The event will take place between :start and :end';
    
    $replaced = preg_replace_array('/:[a-z_]+/', ['8:30', '9:00'], $string);
    
    
    

    Str::after()

    Метод Str::after возвращает все после переданного значения в строке. Если значение не существует в строке, то будет возвращена вся строка:

    use Illuminate\Support\Str;
    
    $slice = Str::after('This is my name', 'This is');
    
    
    

    Str::afterLast()

    Метод Str::afterLast возвращает все после последнего вхождения переданного значения в строке. Если значение не существует в строке, то будет возвращена вся строка:

    use Illuminate\Support\Str;
    
    $slice = Str::afterLast('App\Http\Controllers\Controller', '\\');
    
    
    

    Str::ascii()

    Метод Str::ascii попытается транслитерировать строку в ASCII значение:

    use Illuminate\Support\Str;
    
    $slice = Str::ascii('û');
    
    
    

    Str::before()

    Метод Str :: before возвращает все до переданного значения в строке:

    use Illuminate\Support\Str;
    
    $slice = Str::before('This is my name', 'my name');
    
    
    

    Str::beforeLast()

    Метод Str::beforeLast возвращает все до последнего вхождения переданного значения в строке:

    use Illuminate\Support\Str;
    
    $slice = Str::beforeLast('This is my name', 'is');
    
    
    

    Str::between()

    Метод Str::between возвращает часть строки между двумя значениями:

    use Illuminate\Support\Str;
    
    $slice = Str::between('This is my name', 'This', 'name');
    
    
    

    Str::camel()

    Метод Str::camel преобразует переданную строку в camelCase:

    use Illuminate\Support\Str;
    
    $converted = Str::camel('foo_bar');
    
    
    

    Str::contains()

    Метод Str::contains определяет, содержит ли переданная строка указанное значение (с учетом регистра):

    use Illuminate\Support\Str;
    
    $contains = Str::contains('This is my name', 'my');
    
    
    

    Вы также можете указать массив значений, чтобы определить, содержит ли переданная строка какое-либо из значений:

    use Illuminate\Support\Str;
    
    $contains = Str::contains('This is my name', ['my', 'foo']);
    
    
    

    Str::containsAll()

    Метод Str::containsAll определяет, содержит ли переданная строка все значения массива:

    use Illuminate\Support\Str;
    
    $containsAll = Str::containsAll('This is my name', ['my', 'name']);
    
    
    

    Str::endsWith()

    Метод Str::endsWith определяет, заканчивается ли переданная строка указанным значением:

    use Illuminate\Support\Str;
    
    $result = Str::endsWith('This is my name', 'name');
    
    
    

    Вы также можете указать массив значений, чтобы определить, заканчивается ли переданная строка каким-либо из значений:

    use Illuminate\Support\Str;
    
    $result = Str::endsWith('This is my name', ['name', 'foo']);
    
    
    
    $result = Str::endsWith('This is my name', ['this', 'foo']);
    
    
    

    Str::finish()

    Метод Str::finish добавляет один экземпляр указанного значения в переданную строку, если она еще не заканчивается этим значением:

    use Illuminate\Support\Str;
    
    $adjusted = Str::finish('this/string', '/');
    
    
    
    $adjusted = Str::finish('this/string/', '/');
    
    
    

    Str::is()

    Метод Str::is определяет, соответствует ли переданная строка указанному шаблону. Допускается использование метасимвола подстановки *:

    use Illuminate\Support\Str;
    
    $matches = Str::is('foo*', 'foobar');
    
    
    
    $matches = Str::is('baz*', 'foobar');
    
    
    

    Str::isAscii()

    Метод Str::isAscii определяет, является ли переданная строка 7-битной ASCII:

    use Illuminate\Support\Str;
    
    $isAscii = Str::isAscii('Taylor');
    
    
    
    $isAscii = Str::isAscii('ü');
    
    
    

    Str::isUuid()

    Метод Str::isUuid определяет, является ли переданная строка допустимым UUID:

    use Illuminate\Support\Str;
    
    $isUuid = Str::isUuid('a0a2a2d2-0b87-4a18-83f2-2529882be2de');
    
    
    
    $isUuid = Str::isUuid('laravel');
    
    
    

    Str::kebab()

    Метод Str::kebab преобразует переданную строку в kebab-case:

    use Illuminate\Support\Str;
    
    $converted = Str::kebab('fooBar');
    
    
    

    Str::length()

    Метод Str::length возвращает длину переданной строки:

    use Illuminate\Support\Str;
    
    $length = Str::length('Laravel');
    
    
    

    Str::limit()

    Метод Str::limit усекает переданную строку до указанной длины:

    use Illuminate\Support\Str;
    
    $truncated = Str::limit('The quick brown fox jumps over the lazy dog', 20);
    
    
    

    Вы также можете передать третий строковый аргумент, содержимое которого будет добавлено в конец:

    use Illuminate\Support\Str;
    
    $truncated = Str::limit('The quick brown fox jumps over the lazy dog', 20, ' (...)');
    
    
    

    Str::lower()

    Метод Str::lower преобразует переданную строку в нижний регистр:

    use Illuminate\Support\Str;
    
    $converted = Str::lower('LARAVEL');
    
    
    

    Str::markdown()

    Метод Str::markdown конвертирует текст с разметкой GitHub flavored Markdown в HTML:

    use Illuminate\Support\Str;
    
    $html = Str::markdown('# Laravel');
    
    
    
    $html = Str::markdown('# Taylor Otwell', [
        'html_input' => 'strip',
    ]);
    
    
    

    Str::orderedUuid()

    Метод Str::orderedUuid генерирует UUID с «префиксом временной метки», который может быть эффективно сохранен в индексированном столбце базы данных. Каждый UUID, созданный с помощью этого метода, будет отсортирован после UUID, ранее созданных с помощью этого метода:

    use Illuminate\Support\Str;
    
    return (string) Str::orderedUuid();
    

    Str::padBoth()

    Метод Str::padBoth оборачивает функцию str_pad PHP, заполняя обе стороны строки другой строкой, пока конечная строка не достигнет желаемой длины:

    use Illuminate\Support\Str;
    
    $padded = Str::padBoth('James', 10, '_');
    
    
    
    $padded = Str::padBoth('James', 10);
    
    
    

    Str::padLeft()

    Метод Str::padLeft оборачивает функцию str_pad PHP, заполняя левую часть строки другой строкой, пока конечная строка не достигнет желаемой длины:

    use Illuminate\Support\Str;
    
    $padded = Str::padLeft('James', 10, '-=');
    
    
    
    $padded = Str::padLeft('James', 10);
    
    
    

    Str::padRight()

    Метод Str::padRight оборачивает функцию str_pad PHP, заполняя правую часть строки другой строкой, пока конечная строка не достигнет желаемой длины:

    use Illuminate\Support\Str;
    
    $padded = Str::padRight('James', 10, '-');
    
    
    
    $padded = Str::padRight('James', 10);
    
    
    

    Str::plural()

    Метод Str::plural преобразует слово в форму множественного числа. В настоящее время этот метод поддерживает только английский язык:

    use Illuminate\Support\Str;
    
    $plural = Str::plural('car');
    
    
    
    $plural = Str::plural('child');
    
    
    

    Вы можете передать целое число в качестве второго аргумента метода для получения строки в единственном или множественном числе:

    use Illuminate\Support\Str;
    
    $plural = Str::plural('child', 2);
    
    
    
    $singular = Str::plural('child', 1);
    
    
    

    Str::pluralStudly()

    Метод Str::pluralStudly преобразует строку единственного числа формата StudlyCase в форму множественного числа. В настоящее время этот метод поддерживает только английский язык:

    use Illuminate\Support\Str;
    
    $plural = Str::pluralStudly('VerifiedHuman');
    
    
    
    $plural = Str::pluralStudly('UserFeedback');
    
    
    

    Вы можете передать целое число в качестве второго аргумента метода для получения строки в единственном или множественном числе:

    use Illuminate\Support\Str;
    
    $plural = Str::pluralStudly('VerifiedHuman', 2);
    
    
    
    $singular = Str::pluralStudly('VerifiedHuman', 1);
    
    
    

    Str::random()

    Метод Str::random генерирует случайную строку указанной длины. Этот метод использует функцию random_bytes PHP:

    use Illuminate\Support\Str;
    
    $random = Str::random(40);
    

    Str::remove()

    Метод Str::remove удаляет указанную подстроку или массив подстрок в строке:

    use Illuminate\Support\Str;
    
    $string = 'Peter Piper picked a peck of pickled peppers.';
    
    $removed = Str::remove('e', $string);
    
    
    

    Вы можете передать false в качестве третьего аргумента для игнорирования регистра удаляемых подстрок.

    Str::replace()

    Метод Str::replace заменяет в строке одну подстроку другой:

    use Illuminate\Support\Str;
    
    $string = 'Laravel 8.x';
    
    $replaced = Str::replace('8.x', '9.x', $string);
    
    
    

    Str::replaceArray()

    Метод Str::replaceArray последовательно заменяет указанное значение в строке, используя массив:

    use Illuminate\Support\Str;
    
    $string = 'The event will take place between ? and ?';
    
    $replaced = Str::replaceArray('?', ['8:30', '9:00'], $string);
    
    
    

    Str::replaceFirst()

    Метод Str::replaceFirst заменяет первое вхождение переданного значения в строке:

    use Illuminate\Support\Str;
    
    $replaced = Str::replaceFirst('the', 'a', 'the quick brown fox jumps over the lazy dog');
    
    
    

    Str::replaceLast()

    Метод Str::replaceLast заменяет последнее вхождение переданного значения в строке:

    use Illuminate\Support\Str;
    
    $replaced = Str::replaceLast('the', 'a', 'the quick brown fox jumps over the lazy dog');
    
    
    

    Str::singular()

    Метод Str::singular преобразует слово в форму единственного числа. В настоящее время этот метод поддерживает только английский язык:

    use Illuminate\Support\Str;
    
    $singular = Str::singular('cars');
    
    
    
    $singular = Str::singular('children');
    
    
    

    Str::slug()

    Метод Str::slug создает «дружественный фрагмент» URL-адреса из переданной строки:

    use Illuminate\Support\Str;
    
    $slug = Str::slug('Laravel 5 Framework', '-');
    
    
    

    Str::snake()

    Метод Str::snake преобразует переданную строку в snake_case:

    use Illuminate\Support\Str;
    
    $converted = Str::snake('fooBar');
    
    
    

    Str::start()

    Метод Str::start добавляет один экземпляр указанного значения в переданную строку, если она еще не начинается этим значением:

    use Illuminate\Support\Str;
    
    $adjusted = Str::start('this/string', '/');
    
    
    
    $adjusted = Str::start('/this/string', '/');
    
    
    

    Str::startsWith()

    Метод Str::startsWith определяет, начинается ли переданная строка с указанного значения:

    use Illuminate\Support\Str;
    
    $result = Str::startsWith('This is my name', 'This');
    
    
    

    Str::studly()

    Метод Str::studly преобразует переданную строку в StudlyCase:

    use Illuminate\Support\Str;
    
    $converted = Str::studly('foo_bar');
    
    
    

    Str::substr()

    Метод Str::substr возвращает часть строки, заданную параметрами «начало» и «длина»:

    use Illuminate\Support\Str;
    
    $converted = Str::substr('The Laravel Framework', 4, 7);
    
    
    

    Str::substrCount()

    Метод Str::substrCount возвращает число вхождений подстроки в строку:

    use Illuminate\Support\Str;
    
    $count = Str::substrCount('If you like ice cream, you will like snow cones.', 'like');
    
    
    

    Str::title()

    Метод Str::title преобразует переданную строку в Title Case:

    use Illuminate\Support\Str;
    
    $converted = Str::title('a nice title uses the correct case');
    
    
    

    Str::ucfirst()

    Метод Str::ucfirst возвращает переданную строку с первой заглавной буквой:

    use Illuminate\Support\Str;
    
    $string = Str::ucfirst('foo bar');
    
    
    

    Str::upper()

    Метод Str::upper преобразует переданную строку в верхний регистр:

    use Illuminate\Support\Str;
    
    $string = Str::upper('laravel');
    
    
    

    Str::uuid()

    Метод Str::uuid генерирует UUID (версия 4):

    use Illuminate\Support\Str;
    
    return (string) Str::uuid();
    

    wordCount

    Метод wordCount возвращает число слов в строке:

    use Illuminate\Support\Str;
    
    Str::wordCount('Hello, world!'); 
    

    Str::words()

    Метод Str::words ограничивает количество слов в строке. Дополнительная строка может быть передана этому методу через его третий аргумент, чтобы указать, какая строка должна быть добавлена в конец усеченной строки:

    use Illuminate\Support\Str;
    
    return Str::words('Perfectly balanced, as all things should be.', 3, ' >>>');
    
    
    

    trans()

    Функция trans переводит переданный ключ перевода, используя ваши файлы локализации:

    echo trans('messages.welcome');
    

    Если указанный ключ перевода не существует, функция trans вернет данный ключ. Итак, используя приведенный выше пример, функция trans вернет messages.welcome, если ключ перевода не существует.

    trans_choice()

    Функция trans_choice переводит заданный ключ перевода с изменением формы слова:

    echo trans_choice('messages.notifications', $unreadCount);
    

    Если указанный ключ перевода не существует, функция trans_choice вернет данный ключ. Итак, используя приведенный выше пример, функция trans_choice вернет messages.notifications, если ключ перевода не существует.

    Строки Fluent

    Строки Fluent обеспечивают более гибкий объектно-ориентированный интерфейс для работы со строковыми значениями, позволяя объединять несколько строковых операций вместе с использованием более удобочитаемого синтаксиса по сравнению с традиционными строковыми операциями.

    after

    Метод after возвращает все после переданного значения в строке. Вся строка будет возвращена, если значение не существует в строке:

    use Illuminate\Support\Str;
    
    $slice = Str::of('This is my name')->after('This is');
    
    
    

    afterLast

    Метод afterLast возвращает все после последнего вхождения переданного значения в строке. Вся строка будет возвращена, если значение не существует в строке:

    use Illuminate\Support\Str;
    
    $slice = Str::of('App\Http\Controllers\Controller')->afterLast('\\');
    
    
    

    append

    Метод append добавляет указанные значения в строку:

    use Illuminate\Support\Str;
    
    $string = Str::of('Taylor')->append(' Otwell');
    
    
    

    ascii

    Метод ascii попытается транслитерировать строку в значение ASCII:

    use Illuminate\Support\Str;
    
    $string = Str::of('ü')->ascii();
    
    
    

    basename

    Метод basename вернет завершающий компонент имени переданной строки:

    use Illuminate\Support\Str;
    
    $string = Str::of('/foo/bar/baz')->basename();
    
    
    

    При необходимости вы можете указать «расширение», которое будет удалено из завершающего компонента:

    use Illuminate\Support\Str;
    
    $string = Str::of('/foo/bar/baz.jpg')->basename('.jpg');
    
    
    

    before

    Метод before возвращает все до указанного значения в строке:

    use Illuminate\Support\Str;
    
    $slice = Str::of('This is my name')->before('my name');
    
    
    

    beforeLast

    Метод beforeLast возвращает все до последнего вхождения переданного значения в строку:

    use Illuminate\Support\Str;
    
    $slice = Str::of('This is my name')->beforeLast('is');
    
    
    

    camel

    Метод camel преобразует переданную строку в camelCase:

    use Illuminate\Support\Str;
    
    $converted = Str::of('foo_bar')->camel();
    
    
    

    contains

    Метод contains определяет, содержит ли переданная строка указанное значение (с учетом регистра):

    use Illuminate\Support\Str;
    
    $contains = Str::of('This is my name')->contains('my');
    
    
    

    Вы также можете указать массив значений, чтобы определить, содержит ли переданная строка какое-либо из этих значений:

    use Illuminate\Support\Str;
    
    $contains = Str::of('This is my name')->contains(['my', 'foo']);
    
    
    

    containsAll

    Метод containsAll определяет, содержит ли переданная строка все значения массива:

    use Illuminate\Support\Str;
    
    $containsAll = Str::of('This is my name')->containsAll(['my', 'name']);
    
    
    

    dirname

    Метод dirname возвращает родительскую часть директории переданной строки:

    use Illuminate\Support\Str;
    
    $string = Str::of('/foo/bar/baz')->dirname();
    
    
    

    При желании вы можете указать, сколько уровней каталогов вы хотите вырезать из строки:

    use Illuminate\Support\Str;
    
    $string = Str::of('/foo/bar/baz')->dirname(2);
    
    
    

    endsWith

    Метод endsWith определяет, заканчивается ли переданная строка указанным значением:

    use Illuminate\Support\Str;
    
    $result = Str::of('This is my name')->endsWith('name');
    
    
    

    Вы также можете указать массив значений, чтобы определить, заканчивается ли переданная строка каким-либо из указанных значений:

    use Illuminate\Support\Str;
    
    $result = Str::of('This is my name')->endsWith(['name', 'foo']);
    
    
    
    $result = Str::of('This is my name')->endsWith(['this', 'foo']);
    
    
    

    exactly

    Метод exactly определяет, является ли переданная строка точным совпадением с другой строкой:

    use Illuminate\Support\Str;
    
    $result = Str::of('Laravel')->exactly('Laravel');
    
    
    

    explode

    Метод explode разделяет строку по заданному разделителю и возвращает коллекцию, содержащую каждый раздел строки разбиения:

    use Illuminate\Support\Str;
    
    $collection = Str::of('foo bar baz')->explode(' ');
    
    
    

    finish

    Метод finish добавляет один экземпляр указанного значения в переданную строку, если она еще не заканчивается этим значением:

    use Illuminate\Support\Str;
    
    $adjusted = Str::of('this/string')->finish('/');
    
    
    
    $adjusted = Str::of('this/string/')->finish('/');
    
    
    

    is

    Метод is определяет, соответствует ли переданная строка указанному шаблону. Допускается использование метасимвола подстановки *:

    use Illuminate\Support\Str;
    
    $matches = Str::of('foobar')->is('foo*');
    
    
    
    $matches = Str::of('foobar')->is('baz*');
    
    
    

    isAscii

    Метод isAscii определяет, является ли переданная строка строкой ASCII:

    use Illuminate\Support\Str;
    
    $result = Str::of('Taylor')->isAscii();
    
    
    
    $result = Str::of('ü')->isAscii();
    
    
    

    isEmpty

    Метод isEmpty определяет, является ли переданная строка пустой:

    use Illuminate\Support\Str;
    
    $result = Str::of('  ')->trim()->isEmpty();
    
    
    
    $result = Str::of('Laravel')->trim()->isEmpty();
    
    
    

    isNotEmpty

    Метод isNotEmpty определяет, является ли переданная строка не пустой:

    use Illuminate\Support\Str;
    
    $result = Str::of('  ')->trim()->isNotEmpty();
    
    
    
    $result = Str::of('Laravel')->trim()->isNotEmpty();
    
    
    

    kebab

    Метод kebab преобразует переданную строку в kebab-case:

    use Illuminate\Support\Str;
    
    $converted = Str::of('fooBar')->kebab();
    
    
    

    length

    Метод length возвращает длину переданной строки:

    use Illuminate\Support\Str;
    
    $length = Str::of('Laravel')->length();
    
    
    

    limit

    Метод limit усекает переданную строку до указанной длины:

    use Illuminate\Support\Str;
    
    $truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20);
    
    
    

    Вы также можете передать второй строковый аргумент, содержимое которого будет добавлено в конец:

    use Illuminate\Support\Str;
    
    $truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20, ' (...)');
    
    
    

    lower

    Метод lower преобразует переданную строку в нижний регистр:

    use Illuminate\Support\Str;
    
    $result = Str::of('LARAVEL')->lower();
    
    
    

    ltrim

    Метод ltrim удаляет символы из начала строки:

    use Illuminate\Support\Str;
    
    $string = Str::of('  Laravel  ')->ltrim();
    
    
    
    $string = Str::of('/Laravel/')->ltrim('/');
    
    
    

    markdown

    Метод markdown конвертирует текст с разметкой GitHub flavored Markdown в HTML:

    use Illuminate\Support\Str;
    
    $html = Str::of('# Laravel')->markdown();
    
    
    
    $html = Str::of('# Taylor Otwell')->markdown([
        'html_input' => 'strip',
    ]);
    
    
    

    match

    Метод match вернет часть строки, которая соответствует указанному шаблону регулярного выражения:

    use Illuminate\Support\Str;
    
    $result = Str::of('foo bar')->match('/bar/');
    
    
    
    $result = Str::of('foo bar')->match('/foo (.*)/');
    
    
    

    matchAll

    Метод matchAll вернет коллекцию, содержащую части строки, которые соответствуют указанному шаблону регулярного выражения:

    use Illuminate\Support\Str;
    
    $result = Str::of('bar foo bar')->matchAll('/bar/');
    
    
    

    Если вы укажете группировку в выражении, то Laravel вернет коллекцию совпадений этой группы:

    use Illuminate\Support\Str;
    
    $result = Str::of('bar fun bar fly')->matchAll('/f(\w*)/');
    
    
    

    If no matches are found, an empty collection will be returned.

    padBoth

    Метод padBoth оборачивает функцию str_pad PHP, заполняя обе стороны строки другой строкой, пока конечная строка не достигнет желаемой длины:

    use Illuminate\Support\Str;
    
    $padded = Str::of('James')->padBoth(10, '_');
    
    
    
    $padded = Str::of('James')->padBoth(10);
    
    
    

    padLeft

    Метод padLeft оборачивает функцию str_pad PHP, заполняя левую часть строки другой строкой, пока конечная строка не достигнет желаемой длины:

    use Illuminate\Support\Str;
    
    $padded = Str::of('James')->padLeft(10, '-=');
    
    
    
    $padded = Str::of('James')->padLeft(10);
    
    
    

    padRight

    Метод padRight оборачивает функцию str_pad PHP, заполняя правую часть строки другой строкой, пока конечная строка не достигнет желаемой длины:

    use Illuminate\Support\Str;
    
    $padded = Str::of('James')->padRight(10, '-');
    
    
    
    $padded = Str::of('James')->padRight(10);
    
    
    

    pipe

    Метод pipe позволяет вам преобразовать строку, передав ее текущее значение указанной функции обратного вызова:

    use Illuminate\Support\Str;
    
    $hash = Str::of('Laravel')->pipe('md5')->prepend('Checksum: ');
    
    
    
    $closure = Str::of('foo')->pipe(function ($str) {
        return 'bar';
    });
    
    
    

    plural

    Метод plural преобразует слово в форму множественного числа. В настоящее время этот метод поддерживает только английский язык:

    use Illuminate\Support\Str;
    
    $plural = Str::of('car')->plural();
    
    
    
    $plural = Str::of('child')->plural();
    
    
    

    Вы можете передать целое число в качестве второго аргумента метода для получения строки в единственном или множественном числе:

    use Illuminate\Support\Str;
    
    $plural = Str::of('child')->plural(2);
    
    
    
    $plural = Str::of('child')->plural(1);
    
    
    

    prepend

    Метод prepend добавляет указанные значения в начало строки:

    use Illuminate\Support\Str;
    
    $string = Str::of('Framework')->prepend('Laravel ');
    
    
    

    remove

    Метод remove удаляет указанную подстроку или массив подстрок в строке:

    use Illuminate\Support\Str;
    
    $string = Str::of('Arkansas is quite beautiful!')->remove('quite');
    
    
    

    Вы можете передать false в качестве второго аргумента для игнорирования регистра удаляемых подстрок.

    replace

    Метод replace заменяет указанную строку внутри строки:

    use Illuminate\Support\Str;
    
    $replaced = Str::of('Laravel 6.x')->replace('6.x', '7.x');
    
    
    

    replaceArray

    Метод replaceArray последовательно заменяет указанное значение в строке, используя массив:

    use Illuminate\Support\Str;
    
    $string = 'The event will take place between ? and ?';
    
    $replaced = Str::of($string)->replaceArray('?', ['8:30', '9:00']);
    
    
    

    replaceFirst

    Метод replaceFirst заменяет первое вхождение указанного значения в строке:

    use Illuminate\Support\Str;
    
    $replaced = Str::of('the quick brown fox jumps over the lazy dog')->replaceFirst('the', 'a');
    
    
    

    replaceLast

    Метод replaceLast заменяет последнее вхождение указанного значения в строке:

    use Illuminate\Support\Str;
    
    $replaced = Str::of('the quick brown fox jumps over the lazy dog')->replaceLast('the', 'a');
    
    
    

    replaceMatches

    Метод replaceMatches заменяет все части строки, соответствующие указанному шаблону, переданной строки:

    use Illuminate\Support\Str;
    
    $replaced = Str::of('(+1) 501-555-1000')->replaceMatches('/[^A-Za-z0-9]++/', '')
    
    
    

    Метод replaceMatches также принимает замыкание, которое будет вызвано для каждой части строки, соответствующей шаблону, что позволяет вам выполнять логику замены в замыкании и возвращать замененное значение:

    use Illuminate\Support\Str;
    
    $replaced = Str::of('123')->replaceMatches('/\d/', function ($match) {
        return '['.$match[0].']';
    });
    
    
    

    rtrim

    Метод rtrim удаляет символы из конца строки:

    use Illuminate\Support\Str;
    
    $string = Str::of('  Laravel  ')->rtrim();
    
    
    
    $string = Str::of('/Laravel/')->rtrim('/');
    
    
    

    singular

    Метод singular преобразует слово в форму единственного числа. В настоящее время этот метод поддерживает только английский язык:

    use Illuminate\Support\Str;
    
    $singular = Str::of('cars')->singular();
    
    
    
    $singular = Str::of('children')->singular();
    
    
    

    slug

    Метод slug создает «дружественный фрагмент» URL-адреса из переданной строки:

    use Illuminate\Support\Str;
    
    $slug = Str::of('Laravel Framework')->slug('-');
    
    
    

    snake

    Метод snake преобразует переданную строку в snake_case:

    use Illuminate\Support\Str;
    
    $converted = Str::of('fooBar')->snake();
    
    
    

    split

    Метод split разбивает строку на коллекцию с помощью регулярного выражения:

    use Illuminate\Support\Str;
    
    $segments = Str::of('one, two, three')->split('/[\s,]+/');
    
    
    

    start

    Метод start добавляет один экземпляр указанного значения в переданную строку, если она еще не начинается этим значением:

    use Illuminate\Support\Str;
    
    $adjusted = Str::of('this/string')->start('/');
    
    
    
    $adjusted = Str::of('/this/string')->start('/');
    
    
    

    startsWith

    Метод startsWith определяет, начинается ли переданная строка с указанного значения:

    use Illuminate\Support\Str;
    
    $result = Str::of('This is my name')->startsWith('This');
    
    
    

    studly

    Метод studly преобразует переданную строку в StudlyCase:

    use Illuminate\Support\Str;
    
    $converted = Str::of('foo_bar')->studly();
    
    
    

    substr

    Метод substr возвращает часть строки, заданную параметрами «начало» и «длина»:

    use Illuminate\Support\Str;
    
    $string = Str::of('Laravel Framework')->substr(8);
    
    
    
    $string = Str::of('Laravel Framework')->substr(8, 5);
    
    
    

    tap

    Метод tap передает строку заданному замыканию, позволяя вам взаимодействовать с ней, не затрагивая при этом саму строку. Исходная строка возвращается методом tap независимо от того, что возвращает замыкание:

    use Illuminate\Support\Str;
    
    $string = Str::of('Laravel')
        ->append(' Framework')
        ->tap(function ($string) {
            dump('String after append: ' . $string);
        })
        ->upper();
    
    
    

    test

    Метод test определяет, соответствует ли строка переданному шаблону регулярного выражения:

    use Illuminate\Support\Str;
    
    $result = Str::of('Laravel Framework')->test('/Laravel/');
    
    
    

    title

    Метод title преобразует переданную строку в Title Case:

    use Illuminate\Support\Str;
    
    $converted = Str::of('a nice title uses the correct case')->title();
    
    
    

    trim

    Метод trim обрезает переданную строку:

    use Illuminate\Support\Str;
    
    $string = Str::of('  Laravel  ')->trim();
    
    
    
    $string = Str::of('/Laravel/')->trim('/');
    
    
    

    ucfirst

    Метод ucfirst возвращает переданную строку с первой заглавной буквой:

    use Illuminate\Support\Str;
    
    $string = Str::of('foo bar')->ucfirst();
    
    
    

    upper

    Метод upper преобразует переданную строку в верхний регистр:

    use Illuminate\Support\Str;
    
    $adjusted = Str::of('laravel')->upper();
    
    
    

    when

    Метод when вызывает указанное замыкание, если переданное условие истинно. Замыкание получит экземпляр Fluent:

    use Illuminate\Support\Str;
    
    $string = Str::of('Taylor')
                    ->when(true, function ($string) {
                        return $string->append(' Otwell');
                    });
    
    
    

    При необходимости вы можете передать другое замыкание в качестве третьего параметра методу when. Это замыкание будет выполнено, если параметр условия оценивается как false.

    whenEmpty

    Метод whenEmpty вызывает переданное замыкание, если строка пуста. Если замыкание возвращает значение, то это значение будет возвращено методом whenEmpty. Если замыкание не возвращает значение, будет возвращен экземпляр Fluent:

    use Illuminate\Support\Str;
    
    $string = Str::of('  ')->whenEmpty(function ($string) {
        return $string->trim()->prepend('Laravel');
    });
    
    
    

    wordCount

    Метод wordCount возвращает число слов в строке:

    use Illuminate\Support\Str;
    
    Str::of('Hello, world!')->wordCount(); 
    

    words

    Метод words ограничивает количество слов в строке. Дополнительная строка может быть передана этому методу, чтобы указать, какая строка должна быть добавлена в конец усеченной строки:

    use Illuminate\Support\Str;
    
    $string = Str::of('Perfectly balanced, as all things should be.')->words(3, ' >>>');
    
    
    

    URL-адреса

    action()

    Функция action генерирует URL-адрес для переданного действия контроллера:

    use App\Http\Controllers\HomeController;
    
    $url = action([HomeController::class, 'index']);
    

    Если метод принимает параметры маршрута, вы можете передать их как второй аргумент методу:

    $url = action([UserController::class, 'profile'], ['id' => 1]);
    

    asset()

    Функция asset генерирует URL для исходника (прим. перев.: директория resources), используя текущую схему запроса (HTTP или HTTPS):

    $url = asset('img/photo.jpg');
    

    Вы можете настроить хост URL исходников, установив переменную ASSET_URL в вашем файле .env. Это может быть полезно, если вы размещаете свои исходники на внешнем сервисе, таком как Amazon S3 или другой CDN:

    
    
    $url = asset('img/photo.jpg'); 
    

    route()

    Функция route генерирует URL для переданного именованного маршрута:

    $url = route('route.name');
    

    Если маршрут принимает параметры, вы можете передать их в качестве второго аргумента методу:

    $url = route('route.name', ['id' => 1]);
    

    По умолчанию функция route генерирует абсолютный URL. Если вы хотите создать относительный URL, вы можете передать false в качестве третьего аргумента:

    $url = route('route.name', ['id' => 1], false);
    

    secure_asset()

    Функция secure_asset генерирует URL для исходника, используя HTTPS:

    $url = secure_asset('img/photo.jpg');
    

    secure_url()

    Функция secure_url генерирует полный URL-адрес для указанного пути, используя HTTPS. Дополнительные сегменты URL могут быть переданы во втором аргументе функции:

    $url = secure_url('user/profile');
    
    $url = secure_url('user/profile', [1]);
    

    url()

    Функция url генерирует полный URL-адрес для указанного пути:

    $url = url('user/profile');
    
    $url = url('user/profile', [1]);
    

    Если путь не указан, будет возвращен экземпляр Illuminate\Routing\UrlGenerator:

    $current = url()->current();
    
    $full = url()->full();
    
    $previous = url()->previous();
    

    Introduction

    Orchid is a free Laravel package that abstracts standard business logic and allows code-driven rapid application development of back office applications, admin/user panels and dashboards.

    Laravel Orchid Platform

    Interesting Features

    • Rapid Application Development - Focus to PHP development and don't lose time with HTML, CSS, or JavaScript. Build application logic, not admin panels. Try our quick start guide and kick-start your application's development.

    • Form Builder - Prevent reinventing the wheel or forms. Orchid supports already 40+ form elements "out of the box" and allows you to build all kinds of forms quickly.

    • Fast Loading Times - Enjoy a SPA like performance! Transitions can be made without reloading a page and require no additional code. Thanks to the Hotwire project, Orchid makes this a satisfying experience for you and your users.

    • Access Permissions & Roles - Take advantage of granular access permissions, based on a user’s identity and corresponding role membership.

    • Filtering & Sorting - Offer your users the ability to filter and sort data quickly! Orchid uses an Eloquent based filtering/sorting approach.

    • Fast Full-Text Search - Take advantage of the integrated Laravel Scout based full-text search, that allows searching through all available content, and displaying search results almost instantly.

    • Multiple Notifications Types - Orchid offers various types of notifications and allows your application to keep your users informed appropriately.

    Live Demo

    Curious but not (yet) in the mood to read the documentation? Click here, to experience a live demo of Orchid.

    Getting started

    Documentation

    • 🌍 Documentation & Quick Start Guide
    • 🇷🇺 Чтобы ознакомиться с руководством, посетите сайт orchid.software

    Blog

    Orchid's blog informs about news and announcements around Laravel Orchid, including related projects.

    Feedback/Support

    We are continually trying to actively include feedback from the community in the development of Orchid. You help us a lot if you give us well structured and detailed feedback.

    GitHub

    • Create issues to ask questions or report problems.
    • Participate in disccussions around Orchid and share your ideas/opinions.

    Telegram User Groups

    • Global Community
    • Russian Community
    • Spanish Community

    Development

    Releasese Strategy

    We like to keep things as modern as possible and have a "release early, release often" approach to major releases. Meaning, we won't wait an arbitrary number of months to accumulate significant changes and release the next major version. By releasing major versions often, new features will be out earlier, and upgrading between versions will be much easier.

    Changelog

    We actively and continuously maintain a changelog that informs about Orchid's history of improvements, bug fixes and changes.

    Support Orchid

    Thanks to our backers 🙏 , Orchid is free for private and commercial purposes. 🎉

    Voluntary donations are allowing us to spend more time improving Orchid for everyone! 👍