Laravel

Часто используемые команды Laravel

Запуск миграции:


#Чтобы запустить все незавершенные миграции, выполните команду migrate Artisan:
php artisan migrate

#Если вы хотите узнать, какие миграции уже выполнены, то вы можете использовать команду migrate:status Artisan:
php artisan migrate:status

#Откатить последнюю операцию миграции
php artisan migrate:rollback

#Откатить ограниченное количество миграций
php artisan migrate:rollback --step=5

#Команда migrate:reset откатит все миграции вашего приложения:
php artisan migrate:reset

Очистка кэша


#Реоптимизация класса loader:
php artisan optimize

#Очистка кеша приложения:
php artisan cache:clear

#Очистка кеша маршрутов:
php artisan route:cache

#Очистка кеша фронтенда view:
php artisan view:clear

#Очистка кеша конфигурации:
php artisan config:cache

Создание контроллеров


# Создание модели и миграции ModelName
php artisan make:model ModelName --migration

# Создание контроллера PhotoController
php artisan make:controller PhotoController

# Создание ресурсного контроллера PhotoController
php artisan make:controller PhotoController --resource

# Generate a model Flight
php artisan make:model Flight

# Generate a database migration and generate the model Flight
php artisan make:model Flight --migration

# Generate a model and a FlightFactory class...
php artisan make:model Flight --factory
php artisan make:model Flight -f

# Generate a model and a FlightSeeder class...
php artisan make:model Flight --seed
php artisan make:model Flight -s

# Generate a model and a FlightController class...
php artisan make:model Flight --controller
php artisan make:model Flight -c

# Generate a model, FlightController resource class, and form request classes...
php artisan make:model Flight --controller --resource --requests
php artisan make:model Flight -crR

# Generate a model and a FlightPolicy class...
php artisan make:model Flight --policy

# Generate a model and a migration, factory, seeder, and controller...
php artisan make:model Flight -mfsc

# Shortcut to generate a model, migration, factory, seeder, policy, controller, and form requests...
(Создать модель, миграцию, фабрику, наполнитель, политику, контроллер и запрос формы ...)
php artisan make:model Flight --all

# Generate a pivot model...
(Создать сводную модель...)
php artisan make:model Member --pivot

Как обновить composer


php artisan --version версия Laravel

Как обновить composer через консоль OpenServer?
переходите с посощью cd в папку domains/ваш сайт и запускаете
composer self-update

Пространство имен PHP — Пространства имен позволяют избежать конфликта имен и сгруппировать функционал. Внутри пространства имен могут быть размещены классы, интерфейсы, функции и константы. Если какая-та конструкция (например, класс или функция) определена вне любого пространства имен, то считается, что она расположена в глобальном пространстве имен. С помощью пространства имен, мы можем использовать классы с одинаковыми именами в разных пакетах, в своем приложении и избежать конфликтов. Для этого, обращение к этим классам идет через пространство имен.  https://habr.com/ru/articles/212773/

Задаем пространство имен.
namespace Stark

Используя директиву use, мы можем получить класс из другого пространства имён.
use Tully\Brynden as Blackfish

Redis – это расширенное хранилище ключ-значение с открытым исходным кодом. Его часто называют сервером структуры данных, поскольку ключи могут содержать строкихешиспискинаборы и отсортированные наборы.

CRUD — акроним, обозначающий четыре базовые функции, используемые при работе с базами данных: создание (англ. create), чтение (read), модификация (update), удаление (delete). Введён Джеймсом Мартином (англ. James Martin) в 1983 году как стандартная классификация функций по манипуляции данными.

seeders (сеялки) (см.док.Laravel) — Laravel имеет простой метод заполнения базы данных тестовыми данными, используя классы-наполнители(seed classes). Эти классы хранятся в database/seeds. Можно использовать любое имя для названия класса-наполнителя, но разумным будет применять имена, подобные UsersTableSeeder. По умолчанию класс DatabaseSeeder уже создан в папке наполнителей. В этом классе вы можете использовать метод call для запуска других наполнителей, что позволяет вам контролировать порядок наполнения. Находится в каталоге database/seeders.

Vite — фронтенд инструмент следующего поколения, который с теперь используется в Laravel по умолчанию. Начиная с версии 9.19 в Lravel на смену laravel-mix пришел vite.

npm – это инструмент командной строки, который помогает взаимодействовать с онлайн-платформами, такими как браузеры и серверы. Эта утилита помогает в установке и удалении пакетов, управлении версиями и зависимостями, необходимыми для запуска проекта. Еще npm широко используемый репозиторий для публикации проектов Node.js с открытым исходным кодом. Это означает, что это онлайн-платформа, где каждый может публиковать и делиться инструментами, написанными на JavaScript.

Более подробно об npm

Источники: https://liquidhub.ru/blogs/blog/vite-js

Laravel Mix — ранее был известен как Elixir и поставлялся в виде отдельного плагина, но с версии 5.4 он был включён в официальную поставку фреймворка. Разница между Elixir и Mix в том, что последний является надстройкой над Webpack, в то время как первый основан на Gulp. Laravel Mix умело работает с JavaScript, не только минифицируя его, но и адаптируя под версию ECMAScript 5, гарантируя тем самым, что скрипт будет запускаться на старых браузерах.

Для установки laravel-mix (и всех прочих пакетов из package.json) — нужно выполнить команду из директории проекта:

> npm install

Запустить все задачи:

> npm run dev

Запустить все задачи и следить за изменениями файлов:

> npm run watch

HTTP Middleware (посредники) — это фильтры обработки HTTP-запроса. Так, например, в Laravel включены middlewares для проверки аутентификации пользователя. Если пользователь не залогинен, middleware перенаправляет его на страницу логина.

Composer — это инструмент для управления зависимостями в PHP. Он позволяет вам объявить библиотеки, от которых зависит ваш проект, и он будет устанавливать и обновлять их за вас.

Как установить через composer?
Для этого заходим на официальный сайт и нажимаем кнопку download. После чего нажимаем на Composer-Setup.exe. После чего просто запускаем exe файл и производим установку.
По завершению установки снова открываем командную строку и пишем composer.

Как работает Composer?
Composer работает через интерфейс командной строки и устанавливает зависимости (например библиотеки) для приложения. Он также позволяет пользователям устанавливать PHP-приложения, которые доступны на packagist.org, который является его основным репозиторием, где содержатся все доступные пакеты.

Для чего нужен файл composer Lock?
lock. Файл composer. lock сохраняет текущий список установленных зависимостей и их версии. Таким образом, на момент, когда версии зависимостей уже будут обновлены (команда update), другие люди, которые будут клонировать ваш проект, получат те же самые версии.

Composer: чем отличается require от require-dev
В require добавляются зависимости, которые необходимы для работы пакета.
В require-dev добавляются зависимости, которые нужны для разработки самого пакета. Например, phpunit/phpunit.

Данные для управления зависимостями Composer берёт из файла composer.json, который можно найти в корне проекта, в нашем случае сайта Laravel.
В том случае, если вы клонировали исходники Laravel с GibHub, то необходимо провести её установку. Для этого в командной строке нужно выполнить одну единственную команду:

// Если Composer установлен глобально
composer install
// Если нет
php composer.phar install

Composer для чайников

Возьмем для примера какой-нибудь проект на Laravel.
Соответственно, для работы этого проекта нужно несколько библиотек
Библиотеки перечислены в файле composer.json — ключевой файл при работе с composer

В этом проекте используется 6 библиотек. Соответственно, если разработчик решит опубликовать этот проект на github, то ему достаточно закинуть в репу саму папку со скриптами и составить composer.json, в котором будут описаны библиотеки, необходимые для работы этого проекта. Простота очевидна: в репу не нужно вслед за файлами прицепом тащить все нужные библиотеки. Занимает меньше места, проще распространять проект.

Алгоритм работы:

  1. скачали проект с Git;
  2. Запустили в консоле composer install;
  3. После установки появляется папка vendor, куда складываются установленные пакеты и формируется файл autoload.php в этой папке;
  4. Этот файл подключаем к проекту и всё — библиотеки подключены, можно спокойно с ними работать;

Простота очевидна: не нужно скачивать и подключать библиотеки и их зависимости самостоятельно, composer всё сделает за Вас. И вся эта пачка подключается одним единственным файлом autoload.php.
Все пакеты, которые лежат в vendor, добавляются в автозагрузчик. При этом composer опирается на файлы composer.json, которые должны быть у каждого пакета. Формирование composer.json пакета — это задача разработчика пакета, от потребителя пакета требуется лишь описать в composer.json проекта, какие пакеты нужно подключить.

Это пример composer.json проекта:

В секции require прописана зависимость этого пакета — библиотека, необходимая для работы другой библиотеки. В данном случае, т.е. с точки зрения потребителя пакетов, всевозможные зависимости пакетов — это не наша «забота», с зависимостями composer разберётся сам.

Пространство имён пакета прописано в секции autoload.

«Dotenv\\»: — наименование пространства имён
«Dotenv\\Tests\\»: — наименование пространства имён
«: «src/» — директория, в которой лежат файлы с классами пакета
: «tests/Dotenv/» — директория, в которой лежат файлы с классами пакета


// Если Composer установлен глобально
composer install
// Если нет
php composer.phar install

Более подробно: https://habr.com/ru/articles/439200/

По шагам:

  1. Первым делом создаем папку в папке domains/localhost. К примеру myProject.
  2. Затем заходим в  терминал (консоль) и просто выполняем команду:
    composer create-project laravel/laravel .

    Внимание: Точка на конце обязательна, это значит что мы будем устанавливать проект в корневую папку, т.е.
    в ту папку, в которую мы перешли в терминале. В место точки можно указать myProject, тогда проект будет доступен по пути domains/localhost/myProject/myProject, лишнее вложение.

  3. Настройка Openserver
    Так теперь нужно настроить openserver. Заходим в настройки в Домены.
    Имя домена: myProject;  Папка домена: \localhost\myProject\public;  Сохраняем.
  4. Авторизация
    Дальше нужно подключить авторизацию для этого выполняем следующие команды в терминале последовательно.

    composer require laravel/ui
    php artisan ui vue --auth
    

    Или же авторизацию Laravel Breeze предлагаемую в док. Laravel 9 и опубликовать представления аутентификации, маршруты, контроллеры и другие ресурсы в вашем приложении.

    composer require laravel/breeze --dev
    php artisan breeze:install
    

    Затем после установки платформы вам также следует скомпилировать ресурсы внешнего интерфейса вашего приложения:

    
    npm install
    npm run dev
    

    Устанавливаем пакет spatie/laravel-permission, который связывает пользователей с ролями и разрешениями (https://spatie.be/docs/laravel-permission)(https://www.youtube.com/watch?v=Cl0KKlkwmdc)

    
    composer require spatie/laravel-permission
    php artisan migrate
    
  5. Все. Установка завершена. Можно перейти в браузер, ввести http://myProject и проект будет работать. Теперь необходимо создать БД через phpMyadmin и прописать ее настройки в файле .env.
  6. Запускаем http://myProject/register для регистрации
  7. Запускаем http://myProject/login для авторизации

https://27sysday.ru/programmirovanie/laravel/ustanavlivaem-laravel-8-na-lokalnuyu-mashinu

 

Внимание. Могут возикнуть проблеммы при установке Node.js, c помощью команд npm install. Для этого в первую очередь нужно установит последнюю версию Node.js.
Для этого скачиваем ее с https://nodejs.org/en/download/. Версия для windows.  *.msi.

1. Установка NodeJS

  • Перейти на сайт https://nodejs.org/ и скачайте версию «Recommended For Most Users». Устанавливаем NodeJS как обычную программу для Windows

2. Добавление NodeJS в OpenServer

  • откройте НАСТРОЙКИ OpenServer
  • перейдите на вкладку СЕРВЕР
  • в «настройка использования переменной Path» выбрать из выпадающего списка «Свой Path + userdata/config/path.txt + Win Path»
  • СОХРАНИТЕ изменения

3. Создание файла path.txt

  • в паке OpenServer-а находим заходим в *\userdata\config* создаем файл path.txt
  • Откройте созданный файл path.txt и добавьте в него путь до nodejs. У меня это «*C:\Program Files\nodejs*»
  • Сохраните изменения в файле и чтоб openserver смог подхватить nodejs, то обязательно нужно ПЕРЕЗАГРУЗИТЬ OPEN-SERVER

4. Проверка

  • Откройте консоль OpenServer и напишите node -v или npm -v
  • Если вы увидели версию — все ok! Если нет — убедитесь что все настройки сохранены и перезапустите сервер еще раз

Вопросы:

Когда создавать новый ключ приложения в Laravel?

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

php artisan key:generate

Бесплатная админка ORCHID.

https://orchid.software/ru/docs/

https://laravel.ru/posts/1101

spatie/laravel-permission —  Связывание пользователей с ролями и разрешениями.  Этот пакет позволяет вам управлять разрешениями и ролями пользователей в базе данных.

источник:  https://spatie.be/docs/laravel-permission/v6/introduction

Laravel пакеты

https://pack-develop.info/ru/page/laravel-packages


Информация с https://laravel.demiart.ru/10-best-laravel-packages-for-multi-language-translations/


Для создания переключения языков и добавления префикса в ссылку использован пакет

MCAMARA/LARAVEL-LOCALIZATION
Адрес: https://github.com/mcamara/laravel-localization
Автор: Marc Camara
Первый релиз: Январь 2014


Для создания админки для перевода языков в lang

Группа 1. Визуальные менеджеры resources/lang
1. BARRYVDH/LARAVEL-TRANSLATION-MANAGER
Адрес: https://github.com/barryvdh/laravel-translation-manager
Автор: Barry vd. Heuvel
Первый релиз: Июнь 2014


Для создания перевода таблиц Моделей

4. ASTROTOMIC/LARAVEL-TRANSLATABLE (БЫВШИЙ DIMSAV/LARAVEL-TRANSLATABLE)
Адрес: https://github.com/Astrotomic/laravel-translatable
Авторы: Tom Witkowski | Dimitrios Savvopoulos
Первый релиз: Февраль 2014


Основные команды по пакету SPATIE (роли и разрешения)


//все пользователи со всеми их ролями
$all_users_with_all_their_roles = User::with('roles')->get();

//все пользователи со всеми их прямыми разрешениями
$all_users_with_all_their_direct_permissions = User::with('permissions')->get();

//все роли в базе данных
$all_roles_in_database = Role::all(); // Все поля
$all_roles_in_database = Role::all()->pluck('id'); // C выводом конкретного поля

//пользователи без ролей
$users_without_any_roles = User::doesntHave('roles')->get();

//все роли, кроме a и b
$all_roles_except_a_and_b = Role::whereNotIn('name', ['role A', 'role B'])->get();

Создание роли и создание разрешения


//Создание роли и создание разрешения
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

$role = Role::create(['name' => 'writer']);
$permission = Permission::create(['name' => 'edit articles']);

Прямые разрешения для пользователей

Разрешение может быть предоставлено любому пользователю:



$user->givePermissionTo('edit articles');

// Вы также можете предоставить несколько разрешений одновременно
$user->givePermissionTo('edit articles', 'delete articles');

// Вы также можете передать массив
$user->givePermissionTo(['edit articles', 'delete articles']);

Разрешение может быть отозвано у пользователя:


$user->revokePermissionTo('edit articles');

Или отозвать & добавьте новые разрешения за один раз:


$user->syncPermissions(['edit articles', 'delete articles']);

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


$user->hasPermissionTo('edit articles');

Или вы можете передать целое число, представляющее идентификатор разрешения.


$user->hasPermissionTo('1');
$user->hasPermissionTo(Permission::find(1)->id);
$user->hasPermissionTo($somePermission->id);

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


$user->hasAnyPermission(['edit articles', 'publish articles', 'unpublish articles']);

…или если у пользователя есть все разрешения из массива:


$user->hasAllPermissions(['edit articles', 'publish articles', 'unpublish articles']);

Вы также можете передавать целые числа для поиска по идентификатору разрешения.


$user->hasAnyPermission(['edit articles', 1, 5]);

Как и все разрешения, назначаемые с помощью ролей, вы можете проверить, есть ли у пользователя разрешение, используя стандартную функцию can Laravel:


$user->can('edit articles');

Использование разрешений через роли

Назначение ролей

Роль можно назначить любому пользователю:


$user->assignRole('writer');
// Вы также можете назначить несколько ролей одновременно
$user->assignRole('writer', 'admin');
// или как массив
$user->assignRole(['writer', 'admin']);

Роль можно удалить у пользователя:


$user->removeRole('writer');

Роли также можно синхронизировать:


// Все текущие роли будут удалены у пользователя и заменены заданным массивом
$user->syncRoles(['writer', 'admin']);

Проверка ролей

Вы можете определить, имеет ли пользователь определенную роль:


$user->hasRole('writer');

// или хотя бы одна роль из массива ролей:
$user->hasRole(['editor', 'moderator']);

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


$user->hasAnyRole(['writer', 'reader']);
// или
$user->hasAnyRole('writer', 'reader');

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


$user->hasAllRoles(Role::all());

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


$user->hasExactRoles(Role::all());

Назначение разрешений ролям

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


$role->givePermissionTo('edit articles');

Вы можете определить, имеет ли роль определенное разрешение:


$role->hasPermissionTo('edit articles');

Разрешение может быть отозвано у роли:


$role->revokePermissionTo('edit articles');

Или отозвать & добавьте новые разрешения за один раз:


$role->syncPermissions(['edit articles', 'delete articles']);

Функции givePermissionTo и revokePermissionTo могут принимать строка или объект Spatie\Permission\Models\Permission.


// Проверяем, есть ли у пользователя разрешение Direct
$user->hasDirectPermission('edit articles')

// Проверяем, есть ли у пользователя Все прямые разрешения
$user->hasAllDirectPermissions(['edit articles', 'delete articles']);

// Проверяем, есть ли у пользователя какое-либо разрешение напрямую
$user->hasAnyDirectPermission(['create articles', 'delete articles']);

Диррективы Blade

Разрешения


@can('edit articles')
  //
@endcan
//или

@if(auth()->user()->can('edit articles') && $some_other_condition)
  //
@endif

//Вы можете использовать 
@can, @cannot, @canany и @guest 
//для тестирования. для доступа, связанного с разрешениями.

//При использовании имени разрешения, связанного с разрешениями, созданными в этом пакете, вы можете использовать 
@can('permission-name', 'guard_name'), 
//если вам нужно проверить конкретную защиту.

//Вы также можете использовать 
@haspermission('permission-name') 
//или 
@haspermission('permission-name', 'guard_name') 
//аналогичным образом. С соответствующим 
@endhaspermission.

Клинок и роли

Проверьте конкретную роль:


@role('writer')
    Я писатель!
@else
    Я не писатель...
@endrole

такой же как


@hasrole('writer')
    I am a writer!
@else
    I am not a writer...
@endhasrole

что также то же самое, что


@if(auth()->user()->hasRole('writer'))
  //
@endif

Проверьте наличие любой роли в списке:


@hasanyrole($collectionOfRoles)
    У меня есть одна или несколько таких ролей!
@else
    У меня нет ни одной из этих ролей...
@endhasanyrole

// или
@hasanyrole('writer|admin')
    Я либо писатель, либо администратор, либо и то, и другое!
@else
    У меня нет ни одной из этих ролей...
@endhasanyrole

Проверьте все роли:


@hasallroles($collectionOfRoles)
    У меня есть все эти роли!
@else
    У меня нет всех этих ролей...
@endhasallroles
// или
@hasallroles('writer|admin')
    Я и писатель и администратор!
@else
    У меня нет всех этих ролей...
@endhasallroles

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


@unlessrole('does not have this role')
    у меня нет роли
@else
    у меня есть роль
@endunlessrole

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


@hasexactroles('writer|admin')
    Я и писатель, и администратор, и ничего больше!
@else
    У меня нет всех этих ролей или есть еще другие роли...
@endhasexactroles

Eloquent

В чем разница методов


find($id) //принимает идентификатор и возвращает одну модель. Если подходящая модель не существует, она возвращает null.

findOrFail($id) //принимает идентификатор и возвращает одну модель. Если подходящая модель не существует, она выдает ошибку.

first() //возвращает первую запись, найденную в базе данных. Если подходящая модель не существует, она возвращает null.

firstOrFail() //возвращает первую запись, найденную в базе данных. Если подходящая модель не существует, она выдает ошибку.

get() //возвращает коллекцию моделей, соответствующих запросу.

pluck($column) //возвращает коллекцию только значений в данном столбце. В предыдущих версиях Laravel этот метод назывался lists.

toArray() //преобразует модель/коллекцию в простой массив PHP.

Примечание. коллекция — это усиленный массив. Он функционирует аналогично массиву, но имеет много дополнительных функций, как вы можете видеть в документах.

К сожалению, PHP не позволяет использовать объект коллекции везде, где вы можете использовать массив. Например, использование коллекции в цикле foreach в порядке, поместить ее в array_map нет. Точно так же, если вы набираете текст-аргумент как array, PHP не позволит вам передать ему коллекцию. Новые версии PHP имеют тип iterable typehint, который может использоваться для приема как массивов, так и коллекций.

Если вы хотите получить простой массив из коллекции, вызовите метод all().

Скоупы

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


<?php $posts = App\Models\Post::where('state', 'active') ->whereIn('user_id', $users)
    ->where('votes_count', '>', 100)
    ->orderBy('id', 'desc');

Проблем здесь несколько. Не все условия могут быть очевидны. Например, что такое 100 в примере выше? Почему именно 100? Магическое число. Кроме того, если это число имеет какое-то особое значение, то вероятно оно будет встречаться и в других обработчиках точно в таком же запросе. Это значит что произойдёт дублирование.

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

Для решения этих проблем нужно повышать уровень абстракции – создавать функции, которые прячут в себе эти детали. Их можно сделать самостоятельно, но Eloquent уже имеет встроенный механизм называемый скоупами (Scope).

Его принцип работы крайне прост. Каждое условие или набор условий, которые мы бы хотели как-то обозначить функцией, можно задать в виде скоупа. Скоуп в терминах ORM и есть функция, которая определяется прямо в модели и используется фреймворком при построении запросов:


<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class User extends Model { public function scopeActive($query) { return $query->where('state', 'active');
    }

    public function scopePopular($query)
    {
        return $query->where('votes_count', '>', 100);
    }
}

Каждый скоуп — это обычный метод, который начинается с префикса scope. Именно по префиксу Eloquent понимает, что это скоуп. Внутрь скоупа передаётся запрос, на который можно навешивать дополнительные условия. Результатом работы любого скоупа должен быть скоуп.

Далее они становятся доступны как и любые другие методы языка запросов:


<?php // И как статический метод и как обычный метод $users = App\Models\User::popular()->active()->orderBy('created_at')->get();

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


<?php public function scopePopular($query) { return $query->active()->where('votes_count', '>', 100);
}

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

Некоторые скоупы зависят от параметров, передающихся в процессе составления запроса. Для этого достаточно описать эти параметры внутри скоупа после параметра $query:


<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class User extends Model { public function scopeOfType($query, $type) { return $query->where('type', $type);
    }
}

Структура макета шаблона Blade.

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


< !-- resources/views/layouts/app.blade.php -- >
< 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 >

< !-- resources/views/child.blade.php -- >

@extends('layouts.app')

@section('title', 'Page Title')

@section('sidebar')

@parent

< span class="hljs-tag"><< span class="hljs-name">p< /span >>< /span >This is appended to the master sidebar.< span class="hljs-tag"></< span class="hljs-name">p< /span >>< /span >

@endsection

@section('content')
<p>This is my body content.</p>< /span > 
@endsection

Вы не вошли в аккаунт.


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

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


@isset($records)
    // Переменная $records определена и не равна `null` ...
@endisset

@empty($records)
    // Переменная $records считается «пустой» ...
@endempty

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


@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-1" >
        @yield('navigation')
    < / div >
    < div class="clearfix-1" >< / div >
@endif

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


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

Операторы Switch


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

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

    @default
        Default case...
@endswitch

Циклы


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

@foreach ($users as $user)
    < p >This is user {{ $user->id }}< /p >
@endforeach

@forelse ($users as $user)
    < li >{{ $user->name }}< /li >
@empty
    < p >No users< /p >
@endforelse

@while (true)
    < p >I'm looping forever.< /p >
@endwhile

Вы также можете завершить цикл или пропустить текущую итерацию, используя директивы @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

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


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

    < form >
        < !-- Form Contents -- >
    < /form >
< /div >

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

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

Создание символьной ссылки

php artisan storage:link

После того как была создана символическая ссылка, вы можете создавать URL-адреса для сохраненных файлов, используя помощник asset:

echo asset('storage/file.txt');

Вы можете настроить дополнительные символические ссылки в файле конфигурации filesystems. Каждая из настроенных ссылок будет создана, когда вы запустите команду storage:link:


'links' => [
    public_path('storage') => storage_path('app/public'),
    public_path('images') => storage_path('app/images'),
],

Учебник Laravel 9:
https://code.mu/ru/php/framework/laravel/book/prime/#r=/ru/php/framework/laravel/book/prime/database/eloquent/records-removing/

Уроки Laravel
https://upread.ru/art.php?id=913

Преффиксы

Создаем систему управления ролями пользователей на Laravel 9. Spatie laravel-permission

права и Роли
https://laravel.demiart.ru/guide-to-roles-and-permissions/

Создаем много-уровневое меню

https://si-dev.com/ru/blog/laravel-multilevel-menu

Laravel пакеты

https://pack-develop.info/ru/page/laravel-packages

 

 

Настройка сообщений об ошибках

Вы можете настроить эти сообщения с помощью третьего параметра метода validate:


public function store(Request $request) {
    $this->validate($request, [
        'name' => 'required|string',
        'body' => 'required|string',
        'publish_at' => 'required|date_format:Y-m-d H:i:s'
    ], [
      'name.required' => 'Поле Название статьи обязательно для заполнения',
      'body.required'  => 'Поле Текст статьи обязательно для заполнения',
      'publish_at.date_format' => 'Поле Дата публикации имеет неверный формат'
    ]);
    // Данные валидны и будет запущен следующий код
    ...
}

При работе с Запросом формы можно настроить сообщения об ошибках в методе messages:


public function messages()
{
    return [
       'name.required' => 'Поле Название статьи обязательно для заполнения',
      'body.required'  => 'Поле Текст статьи обязательно для заполнения',
      'publish_at.date_format' => 'Поле Дата публикации имеет неверный формат'
    ];
}

Пролистать наверх