Laravel — Обзор
Laravel — это PHP-фреймворк с открытым исходным кодом, который является надежным и простым для понимания. Он следует шаблону проектирования модель-вид-контроллер. Laravel повторно использует существующие компоненты различных фреймворков, что помогает в создании веб-приложения. Разработанное таким образом веб-приложение является более структурированным и прагматичным.
Laravel предлагает богатый набор функций, который включает в себя базовые функции PHP-фреймворков, таких как CodeIgniter, Yii и других языков программирования, таких как Ruby on Rails. Laravel обладает очень богатым набором функций, которые повысят скорость веб-разработки.
Если вы знакомы с Core PHP и Advanced PHP, Laravel облегчит вашу задачу. Это экономит много времени, если вы планируете разработать сайт с нуля. Кроме того, веб-сайт, созданный в Laravel, защищен и предотвращает несколько веб-атак.
Преимущества Laravel
Laravel предлагает вам следующие преимущества при разработке веб-приложения на его основе:
-
Веб-приложение становится более масштабируемым благодаря инфраструктуре Laravel.
-
При проектировании веб-приложения экономится значительное время, поскольку Laravel повторно использует компоненты из других сред при разработке веб-приложения.
-
Он включает в себя пространства имен и интерфейсы, что помогает организовывать ресурсы и управлять ими.
Веб-приложение становится более масштабируемым благодаря инфраструктуре Laravel.
При проектировании веб-приложения экономится значительное время, поскольку Laravel повторно использует компоненты из других сред при разработке веб-приложения.
Он включает в себя пространства имен и интерфейсы, что помогает организовывать ресурсы и управлять ими.
Композитор
Composer — это инструмент, который включает в себя все зависимости и библиотеки. Это позволяет пользователю создать проект с учетом упомянутой платформы (например, те, которые используются в установке Laravel). Сторонние библиотеки могут быть легко установлены с помощью композитора.
Все зависимости указаны в файле composer.json, который находится в исходной папке.
ремесленник
Интерфейс командной строки, используемый в Laravel, называется Artisan . Он включает в себя набор команд, которые помогают в создании веб-приложения. Эти команды включены в платформу Symphony, в результате чего появились дополнительные функции в Laravel 5.1 (последняя версия Laravel).
Особенности Laravel
Laravel предлагает следующие ключевые функции, которые делают его идеальным выбором для разработки веб-приложений —
модульность
Laravel предоставляет 20 встроенных библиотек и модулей, которые помогают улучшить приложение. Каждый модуль интегрирован с диспетчером зависимостей Composer, который облегчает обновления.
способность быть свидетелем в суде
Laravel включает в себя функции и помощников, которые помогают в тестировании через различные тестовые случаи. Эта функция помогает поддерживать код в соответствии с требованиями.
маршрутизация
Laravel предоставляет пользователю гибкий подход к определению маршрутов в веб-приложении. Маршрутизация помогает лучше масштабировать приложение и повышает его производительность.
Управление конфигурацией
Веб-приложение, разработанное в Laravel, будет работать в разных средах, что означает постоянное изменение его конфигурации. Laravel обеспечивает последовательный подход к эффективному управлению конфигурацией.
Query Builder и ORM
Laravel включает в себя построитель запросов, который помогает в запросах к базам данных, используя различные простые цепочечные методы. Он предоставляет ORM (Object Relational Mapper) и реализацию ActiveRecord, которая называется Eloquent.
Schema Builder
Schema Builder поддерживает определения базы данных и схему в коде PHP. Он также отслеживает изменения, связанные с миграцией базы данных.
Шаблонный движок
Laravel использует движок шаблонов Blade , облегченный язык шаблонов, используемый для разработки иерархических блоков и макетов с предопределенными блоками, включающими динамический контент.
Эл. почта
Laravel включает в себя почтовый класс, который помогает отправлять почту с богатым содержимым и вложениями из веб-приложения.
Аутентификация
Аутентификация пользователя является распространенной функцией в веб-приложениях. Laravel облегчает разработку аутентификации, поскольку включает такие функции, как регистрация, забытый пароль и отправка напоминаний о пароле .
Redis
Laravel использует Redis для подключения к существующему сеансу и кэш-памяти общего назначения. Redis взаимодействует с сессией напрямую.
Очереди
Laravel включает службы очередей, такие как отправка электронной почты большому количеству пользователей или задание Cron . Эти очереди помогают выполнять задачи проще, не дожидаясь завершения предыдущей задачи.
Событие и командная шина
Laravel 5.1 включает в себя командную шину, которая помогает выполнять команды и отправлять события простым способом. Команды в Laravel действуют в соответствии с жизненным циклом приложения.
Laravel — Установка
Для управления зависимостями Laravel использует composer . Убедитесь, что в вашей системе установлен Composer, прежде чем устанавливать Laravel. В этой главе вы увидите процесс установки Laravel.
Для установки Laravel на вашу систему вам нужно будет выполнить следующие шаги:
Шаг 1 — Посетите следующий URL и загрузите Composer, чтобы установить его в своей системе.
https://getcomposer.org/download/
Шаг 2. После установки Composer проверьте установку, введя команду Composer в командной строке, как показано на следующем снимке экрана.
Шаг 3 — Создайте новый каталог в любом месте вашей системы для вашего нового проекта Laravel. После этого перейдите в путь, в котором вы создали новый каталог, и введите следующую команду, чтобы установить Laravel.
composer create-project laravel/laravel –-prefer-dist
Теперь сосредоточимся на установке версии 5.7. В Laravel версии 5.7 вы можете установить весь фреймворк, введя следующую команду:
composer create-project laravel/laravel test dev-develop
Вывод команды такой, как показано ниже —
Фреймворк Laravel может быть установлен непосредственно с веткой разработки, которая включает в себя самые последние фреймворки
Шаг 4 — Приведенная выше команда установит Laravel в текущий каталог. Запустите службу Laravel, выполнив следующую команду.
php artisan serve
Шаг 5 — После выполнения вышеуказанной команды вы увидите экран, как показано ниже —
Шаг 6 — Скопируйте URL, подчеркнутый серым на скриншоте выше, и откройте этот URL в браузере. Если вы видите следующий экран, это означает, что Laravel был успешно установлен.
Laravel — Структура приложения
Структура приложения в Laravel — это, в основном, структура папок, подпапок и файлов, включенных в проект. Как только мы создадим проект в Laravel, мы получим обзор структуры приложения, как показано на рисунке здесь.
Снимок, показанный здесь, относится к корневой папке Laravel, а именно к laravel-project . Он включает в себя различные подпапки и файлы. Анализ папок и файлов, а также их функциональные аспекты приведены ниже —
Приложение
Это папка приложения и включает весь исходный код проекта. Он содержит события, исключения и объявление промежуточного программного обеспечения. Папка приложения содержит различные подпапки, как описано ниже —
Приставка
Консоль включает в себя ремесленные команды, необходимые для Laravel. Он включает в себя каталог с именем Commands , где все команды объявлены с соответствующей подписью. Файл Kernal.php вызывает команды, объявленные в Inspire.php .
Если нам нужно вызвать определенную команду в Laravel, то мы должны внести соответствующие изменения в этот каталог.
События
Эта папка включает в себя все события для проекта.
События используются для запуска действий, выявления ошибок или необходимых проверок и обеспечения большей гибкости. Laravel хранит все события в одном каталоге. По умолчанию включен файл event.php, в котором объявлены все основные события.
Исключения
Эта папка содержит все методы, необходимые для обработки исключений. Он также содержит файл handle.php, который обрабатывает все исключения.
Http
В папке Http есть подпапки для контроллеров, промежуточного программного обеспечения и запросов приложений. Поскольку Laravel следует шаблону проектирования MVC, эта папка включает модель, контроллеры и представления, определенные для определенных каталогов.
Подпапка промежуточного программного обеспечения включает в себя механизм промежуточного программного обеспечения, включающий механизм фильтрации и связь между ответом и запросом.
Подпапка « Запросы » включает в себя все запросы приложения.
работы
Каталог Jobs поддерживает действия, поставленные в очередь для приложения Laravel. Базовый класс распределяется между всеми рабочими местами и обеспечивает центральное расположение для размещения их под одной крышей.
Слушатели
Слушатели зависят от события и включают методы, которые используются для обработки событий и исключений. Например, объявленное событие входа в систему включает событие LoginListener .
полисы
Политики — это классы PHP, которые включают логику авторизации. Laravel включает функцию для создания всей логики авторизации в классах политики внутри этой подпапки.
Провайдеры
В эту папку входят все поставщики услуг, необходимые для регистрации событий для основных серверов и для настройки приложения Laravel.
начальная загрузка
Эта папка содержит все сценарии начальной загрузки приложения. Он содержит подпапку, а именно кеш , который включает в себя все файлы, связанные с кешированием веб-приложения. Вы также можете найти файл app.php , который инициализирует скрипты, необходимые для начальной загрузки.
конфиг
Папка config включает в себя различные конфигурации и связанные параметры, необходимые для бесперебойной работы приложения Laravel. Различные файлы, включенные в папку конфигурации, как показано на рисунке здесь. Имена файлов работают в соответствии с функциональностью, связанной с ними.
База данных
Как следует из названия, этот каталог включает в себя различные параметры для функций базы данных. Он включает в себя три подкаталоги, как указано ниже —
-
Семена. Содержит классы, используемые для базы данных модульного тестирования.
-
Миграции — эта папка помогает в запросах на миграцию базы данных, используемой в веб-приложении.
-
Фабрики — эта папка используется для генерации большого количества записей данных.
Семена. Содержит классы, используемые для базы данных модульного тестирования.
Миграции — эта папка помогает в запросах на миграцию базы данных, используемой в веб-приложении.
Фабрики — эта папка используется для генерации большого количества записей данных.
общественного
Это корневая папка, которая помогает в инициализации приложения Laravel. Он включает в себя следующие файлы и папки —
-
.htaccess — этот файл задает конфигурацию сервера.
-
javascript и css — эти файлы считаются активами.
-
index.php — этот файл необходим для инициализации веб-приложения.
.htaccess — этот файл задает конфигурацию сервера.
javascript и css — эти файлы считаются активами.
index.php — этот файл необходим для инициализации веб-приложения.
Ресурсы
Каталог ресурсов содержит файлы, которые расширяют возможности вашего веб-приложения. Подпапки, включенные в этот каталог, и их назначение объясняется ниже —
-
assets — папка assets содержит файлы, такие как LESS и SCSS, которые необходимы для стилизации веб-приложения.
-
lang — эта папка содержит конфигурацию для локализации или интернализации.
-
Представления — Представления — это HTML-файлы или шаблоны, которые взаимодействуют с конечными пользователями и играют основную роль в архитектуре MVC.
assets — папка assets содержит файлы, такие как LESS и SCSS, которые необходимы для стилизации веб-приложения.
lang — эта папка содержит конфигурацию для локализации или интернализации.
Представления — Представления — это HTML-файлы или шаблоны, которые взаимодействуют с конечными пользователями и играют основную роль в архитектуре MVC.
Обратите внимание, что каталог ресурсов будет плоским, а не папкой ресурсов. Иллюстрированное изображение того же самого показано ниже —
Место хранения
Это папка, в которой хранятся все журналы и необходимые файлы, которые часто нужны при запуске проекта Laravel. Подпапки, включенные в этот каталог, и их назначение приведены ниже —
-
app — эта папка содержит файлы, которые вызываются последовательно.
-
Framework — содержит сессии, кеш и представления, которые часто вызываются.
-
Журналы — все исключения и журналы ошибок отслеживаются в этой подпапке.
app — эта папка содержит файлы, которые вызываются последовательно.
Framework — содержит сессии, кеш и представления, которые часто вызываются.
Журналы — все исключения и журналы ошибок отслеживаются в этой подпапке.
тесты
Все примеры модульных тестов включены в этот каталог. Соглашение об именовании для именования классов тестовых случаев — camel_case и следует соглашению в соответствии с функциональностью класса.
продавец
Laravel полностью основан на зависимостях Composer, например, для установки программы установки Laravel или для включения сторонних библиотек и т. Д. Папка Vendor включает в себя все зависимости композитора.
В дополнение к вышеупомянутым файлам, Laravel также включает некоторые другие файлы, которые играют основную роль в различных функциях, таких как конфигурация GitHub, пакеты и сторонние библиотеки.
Файлы, включенные в структуру приложения, показаны ниже —
Laravel — Конфигурация
В предыдущей главе мы видели, что основные файлы конфигурации Laravel включены в каталог конфигурации . В этой главе давайте обсудим категории, включенные в конфигурацию.
Конфигурация среды
Переменные среды — это те, которые предоставляют список веб-сервисов вашему веб-приложению. Все переменные среды объявлены в файле .env, который включает параметры, необходимые для инициализации конфигурации.
По умолчанию файл .env содержит следующие параметры:
APP_ENV = local APP_DEBUG = true APP_KEY = base64:ZPt2wmKE/X4eEhrzJU6XX4R93rCwYG8E2f8QUA7kGK8 = APP_URL = http://localhost DB_CONNECTION = mysql DB_HOST = 127.0.0.1 DB_PORT = 3306 DB_DATABASE = homestead DB_USERNAME = homestead DB_PASSWORD = secret CACHE_DRIVER = file SESSION_DRIVER = file QUEUE_DRIVER = sync REDIS_HOST = 127.0.0.1 REDIS_PASSWORD = null REDIS_PORT = 6379 MAIL_DRIVER = smtp MAIL_HOST = mailtrap.ioMAIL_PORT = 2525 MAIL_USERNAME = null MAIL_PASSWORD = null MAIL_ENCRYPTION = null
Важные моменты
При работе с основными конфигурационными файлами Laravel необходимо отметить следующие моменты:
-
Файл .env не должен передаваться в систему управления исходным кодом приложения, поскольку каждый разработчик или пользователь имеет предварительно заданную конфигурацию среды для веб-приложения.
-
Для параметров резервного копирования группа разработчиков должна включить файл .env.example , который должен содержать конфигурацию по умолчанию.
Файл .env не должен передаваться в систему управления исходным кодом приложения, поскольку каждый разработчик или пользователь имеет предварительно заданную конфигурацию среды для веб-приложения.
Для параметров резервного копирования группа разработчиков должна включить файл .env.example , который должен содержать конфигурацию по умолчанию.
Извлечение переменных среды
Все переменные окружения, объявленные в файле .env, могут быть доступны через функции env-helper, которые вызовут соответствующий параметр. Эти переменные также указываются в глобальной переменной $ _ENV всякий раз, когда приложение получает запрос от пользователя. Вы можете получить доступ к переменной окружения, как показано ниже —
'env' => env('APP_ENV', 'production'),
Вспомогательные функции env вызываются в файле app.php, который находится в папке config . Приведенный выше пример вызывает базовый локальный параметр.
Доступ к значениям конфигурации
Вы можете легко получить доступ к значениям конфигурации в любом месте приложения, используя глобальную вспомогательную функцию config. Если значения конфигурации не инициализированы, возвращаются значения по умолчанию.
Например, чтобы установить часовой пояс по умолчанию, используется следующий код —
config(['app.timezone' => 'Asia/Kolkata']);
Кэширование конфигурации
Чтобы повысить производительность и повысить эффективность веб-приложения, важно кэшировать все значения конфигурации. Команда для кэширования значений конфигурации —
config:cache
Следующий снимок экрана показывает кэширование в систематическом подходе —
Режим технического обслуживания
Иногда вам может потребоваться обновить некоторые параметры конфигурации или выполнить обслуживание на вашем веб-сайте. В таких случаях, поддерживая его в режиме обслуживания , вам будет легче. Такие веб-приложения, которые находятся в режиме обслуживания, выдают исключение, а именно MaintenanceModeException с кодом состояния 503.
Вы можете включить режим обслуживания в своем веб-приложении Laravel, используя следующую команду:
php artisan down
На следующем снимке экрана показано, как выглядит веб-приложение в нерабочем состоянии.
Как только вы закончите работу с обновлениями и другим обслуживанием, вы можете отключить режим обслуживания в вашем веб-приложении, используя следующую команду —
php artisan up
Теперь вы можете обнаружить, что веб-сайт показывает результат с надлежащим функционированием и показывает, что режим обслуживания теперь удален, как показано ниже —
Laravel — Маршрутизация
В Laravel все запросы отображаются с помощью маршрутов. Базовая маршрутизация направляет запрос к связанным контроллерам. В этой главе обсуждается маршрутизация в Laravel.
Маршрутизация в Laravel включает в себя следующие категории —
- Базовая маршрутизация
- Параметры маршрута
- Названные маршруты
Базовая маршрутизация
Все маршруты приложений регистрируются в файле app / rout.php . Этот файл сообщает Laravel об идентификаторах URI, на которые он должен ответить, и связанный с ним контроллер даст ему конкретный вызов. Пример маршрута для страницы приветствия можно увидеть, как показано на скриншоте ниже:
Route::get ('/', function () { return view('welcome');});
пример
Посмотрите на следующий пример, чтобы понять больше о маршрутизации —
приложение / Http / routes.php
<?php Route::get('/', function () { return view('welcome'); });
ресурсы / просмотр / welcome.blade.php
<!DOCTYPE html> <html> <head> <title>Laravel</title> <link href = "https://fonts.googleapis.com/css?family=Lato:100" rel = "stylesheet" type = "text/css"> <style> html, body { height: 100%; } body { margin: 0; padding: 0; width: 100%; display: table; font-weight: 100; font-family: 'Lato'; } .container { text-align: center; display: table-cell; vertical-align: middle; } .content { text-align: center; display: inline-block; } .title { font-size: 96px; } </style> </head> <body> <div class = "container"> <div class = "content"> <div class = "title">Laravel 5.1</div> </div> </div> </body> </html>
Механизм маршрутизации показан на рисунке ниже —
Давайте теперь разберемся в деталях, что входит в механизм маршрутизации —
Шаг 1 — Первоначально мы должны выполнить корневой URL-адрес приложения.
Шаг 2. Теперь выполненный URL-адрес должен соответствовать соответствующему методу в файле route.php . В данном случае он должен соответствовать методу и корневому (‘/’) URL. Это выполнит связанную функцию.
Шаг 3 — Функция вызывает файл шаблона resources / views / welcome.blade.php. Затем функция вызывает функцию view () с аргументом ‘welcome’ без использования blade.php .
Это приведет к выводу HTML, как показано на рисунке ниже —
Параметры маршрута
Иногда в веб-приложении вам может потребоваться захватить параметры, переданные с помощью URL. Для этого вам следует изменить код в файле rout.php .
Вы можете записать параметры в файле rout.php двумя способами, как описано здесь —
Обязательные параметры
Это те параметры, которые должны быть обязательно записаны для маршрутизации веб-приложения. Например, важно захватить идентификационный номер пользователя из URL. Это может быть возможно путем определения параметров маршрута, как показано ниже —
Route::get('ID/{id}',function($id) { echo 'ID: '.$id; });
Необязательные параметры
Иногда разработчики могут выдавать параметры как необязательные и это возможно при включении ? после имени параметра в URL. Важно сохранить значение по умолчанию, указанное в качестве имени параметра. Посмотрите на следующий пример, который показывает, как определить необязательный параметр —
Route::get('user/{name?}', function ($name = ' TutorialsPoint ') { return $name;});
В приведенном выше примере проверяется, соответствует ли значение TutorialsPoint, и, соответственно, направляется на определенный URL.
Названные маршруты
Именованные маршруты позволяют удобный способ создания маршрутов. Цепочка маршрутов может быть указана с использованием метода имени в определении маршрута. В следующем коде показан пример создания именованных маршрутов с контроллером —
Route::get('user/profile', 'UserController@showProfile')->name('profile');
Пользовательский контроллер вызовет функцию showProfile с параметром в качестве профиля . Параметры используют метод имени в определении маршрута.
Laravel — Middleware
Промежуточное программное обеспечение действует как мост между запросом и ответом. Это тип фильтрующего механизма. В этой главе описывается механизм промежуточного программного обеспечения в Laravel.
Laravel включает промежуточное программное обеспечение, которое проверяет, аутентифицирован ли пользователь приложения или нет. Если пользователь аутентифицирован, он перенаправляет на домашнюю страницу, в противном случае, если он не перенаправляет на страницу входа.
Промежуточное программное обеспечение можно создать, выполнив следующую команду:
php artisan make:middleware <middleware-name>
Замените <middleware-name> на имя вашего промежуточного программного обеспечения. Промежуточное программное обеспечение, которое вы создаете, можно увидеть в каталоге app / Http / Middleware .
пример
Обратите внимание на следующий пример, чтобы понять механизм промежуточного программного обеспечения —
Шаг 1 — Давайте теперь создадим AgeMiddleware. Чтобы создать это, нам нужно выполнить следующую команду —
php artisan make:middleware AgeMiddleware
Шаг 2 — После успешного выполнения команды вы получите следующий вывод —
Шаг 3 — AgeMiddleware будет создан в приложении / Http / Middleware . Вновь созданный файл будет иметь следующий код, уже созданный для вас.
<?php namespace App\Http\Middleware; use Closure; class AgeMiddleware { public function handle($request, Closure $next) { return $next($request); } }
Регистрация Middleware
Мы должны зарегистрировать каждое промежуточное программное обеспечение перед его использованием. В Laravel есть два типа Middleware.
- Global Middleware
- Маршрутное промежуточное ПО
Глобальное промежуточное программное обеспечение будет выполняться при каждом HTTP-запросе приложения, тогда как промежуточное программное обеспечение маршрута будет назначено определенному маршруту. Промежуточное программное обеспечение может быть зарегистрировано в app / Http / Kernel.php. Этот файл содержит два свойства $ middleware и $ routeMiddleware . Свойство $ middleware используется для регистрации Global Middleware, а свойство $ routeMiddleware используется для регистрации промежуточного программного обеспечения для конкретного маршрута.
Чтобы зарегистрировать глобальное промежуточное программное обеспечение, перечислите класс в конце свойства $ middleware.
protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, ];
Чтобы зарегистрировать промежуточное ПО для конкретного маршрута, добавьте ключ и значение в свойство $ routeMiddleware.
protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, ];
пример
Мы создали AgeMiddleware в предыдущем примере. Теперь мы можем зарегистрировать его в свойстве промежуточного программного обеспечения для конкретного маршрута. Код для этой регистрации показан ниже.
Ниже приведен код для приложения / Http / Kernel.php —
<?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, ]; protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'Age' => \App\Http\Middleware\AgeMiddleware::class, ]; }
Параметры промежуточного программного обеспечения
Мы также можем передавать параметры с помощью Middleware. Например, если ваше приложение имеет разные роли, такие как пользователь, администратор, супер-администратор и т. Д., И вы хотите аутентифицировать действие на основе роли, это может быть достигнуто путем передачи параметров с помощью промежуточного программного обеспечения. Промежуточное программное обеспечение, которое мы создаем, содержит следующую функцию, и мы можем передать наш пользовательский аргумент после аргумента $ next .
public function handle($request, Closure $next) { return $next($request); }
пример
Шаг 1. Создайте RoleMiddleware, выполнив следующую команду:
php artisan make:middleware RoleMiddleware
Шаг 2 — После успешного выполнения вы получите следующий вывод —
Шаг 3. Добавьте следующий код в метод handle недавно созданного приложения RoleMiddlewareat / Http / Middleware / RoleMiddleware.php.
<?php namespace App\Http\Middleware; use Closure; class RoleMiddleware { public function handle($request, Closure $next, $role) { echo "Role: ".$role; return $next($request); } }
Шаг 4 — Зарегистрируйте RoleMiddleware в файле app \ Http \ Kernel.php . Добавьте строку, выделенную серым цветом в этом файле, чтобы зарегистрировать RoleMiddleware.
Шаг 5 — Выполните следующую команду для создания TestController —
php artisan make:controller TestController --plain
Шаг 6 — После успешного выполнения вышеуказанного шага вы получите следующий вывод —
Шаг 7 — Скопируйте следующие строки кода в файл app / Http / TestController.php .
приложение / Http / TestController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class TestController extends Controller { public function index() { echo "<br>Test Controller."; } }
Шаг 8 — Добавьте следующую строку кода в файл app / Http / rout.php .
приложение / Http / routes.php
Route::get('role',[ 'middleware' => 'Role:editor', 'uses' => 'TestController@index', ]);
Шаг 9 — Посетите следующий URL, чтобы протестировать промежуточное программное обеспечение с параметрами
http://localhost:8000/role
Шаг 10 — Вывод будет выглядеть, как показано на следующем рисунке.
Завершаемое промежуточное ПО
Прерываемое промежуточное ПО выполняет некоторую задачу после отправки ответа в браузер. Это может быть достигнуто путем создания промежуточного программного обеспечения с методом завершения в промежуточном программном обеспечении. Прерываемое промежуточное программное обеспечение должно быть зарегистрировано в глобальном промежуточном программном обеспечении. Метод terminate получит два аргумента $ request и $ response. Метод Terminate может быть создан, как показано в следующем коде.
пример
Шаг 1 — Создайте TerminateMiddleware , выполнив следующую команду.
php artisan make:middleware TerminateMiddleware
Шаг 2 — Приведенный выше шаг даст следующий результат —
Шаг 3. Скопируйте следующий код в только что созданный TerminateMiddleware в app / Http / Middleware / TerminateMiddleware.php.
<?php namespace App\Http\Middleware; use Closure; class TerminateMiddleware { public function handle($request, Closure $next) { echo "Executing statements of handle method of TerminateMiddleware."; return $next($request); } public function terminate($request, $response) { echo "<br>Executing statements of terminate method of TerminateMiddleware."; } }
Шаг 4 — Зарегистрируйте TerminateMiddleware в файле app \ Http \ Kernel.php . Добавьте строку, выделенную серым цветом в этом файле, чтобы зарегистрировать TerminateMiddleware.
Шаг 5 — Выполните следующую команду, чтобы создать ABCController .
php artisan make:controller ABCController --plain
Шаг 6 — После успешного выполнения URL вы получите следующий вывод —
Шаг 7 — Скопируйте следующий код в файл app / Http / ABCController.php .
приложение / Http / ABCController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class ABCController extends Controller { public function index() { echo "<br>ABC Controller."; } }
Шаг 8 — Добавьте следующую строку кода в файл app / Http / rout.php .
приложение / Http / routes.php
Route::get('terminate',[ 'middleware' => 'terminate', 'uses' => 'ABCController@index', ]);
Шаг 9 — Посетите следующий URL, чтобы проверить Terminable Middleware.
http://localhost:8000/terminate
Шаг 10 — Вывод будет выглядеть, как показано на следующем рисунке.
Laravel — Пространства имен
Пространства имен могут быть определены как класс элементов, в котором каждый элемент имеет уникальное имя для этого связанного класса. Может использоваться совместно с элементами других классов.
Объявление пространства имен
Ключевое слово use позволяет разработчикам сократить пространство имен.
use <namespace-name>;
Пространством имен по умолчанию, используемым в Laravel, является App, однако пользователь может изменить пространство имен в соответствии с веб-приложением. Создание пользовательского пространства имен с помощью команды ремесленника упоминается следующим образом:
php artisan app:name SocialNet
Созданное пространство имен может включать в себя различные функции, которые могут использоваться в контроллерах и различных классах.
Laravel — Контроллеры
В рамках MVC буква «C» обозначает контроллер. Он действует как трафик между представлениями и моделями. В этой главе вы узнаете о контроллерах в Laravel.
Создание контроллера
Откройте командную строку или терминал в зависимости от используемой операционной системы и введите следующую команду, чтобы создать контроллер с помощью Artisan CLI (интерфейс командной строки).
php artisan make:controller <controller-name> --plain
Замените <имя-контроллера> на имя вашего контроллера. Это создаст простой конструктор при передаче аргумента — обычный . Если вы не хотите создавать простой конструктор, вы можете просто проигнорировать аргумент. Созданный конструктор можно увидеть в app / Http / Controllers .
Вы увидите, что базовое кодирование для вас уже сделано, и вы можете добавить свой собственный код. Созданный контроллер может быть вызван из rout.php по следующему синтаксису.
Синтаксис
Route::get(‘base URI’,’controller@method’);
пример
Шаг 1 — Выполните следующую команду, чтобы создать UserController .
php artisan make:controller UserController --plain
Шаг 2 — После успешного выполнения вы получите следующий вывод.
Шаг 3 — Вы можете увидеть созданный контроллер в app / Http / Controller / UserController.php с некоторой базовой кодировкой, уже написанной для вас, и вы можете добавить свою собственную кодировку в зависимости от ваших потребностей.
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class UserController extends Controller { // }
Промежуточное ПО контроллера
Мы уже видели промежуточное программное обеспечение, и его можно использовать и с контроллером. Промежуточное программное обеспечение также может быть назначено на маршрут контроллера или в конструкторе вашего контроллера. Вы можете использовать метод промежуточного программного обеспечения для назначения промежуточного программного обеспечения контроллеру. Зарегистрированное промежуточное программное обеспечение также может быть ограничено определенным методом контроллера.
Назначение промежуточного программного обеспечения для маршрута
Route::get('profile', [ 'middleware' => 'auth', 'uses' => 'UserController@showProfile' ]);
Здесь мы назначаем промежуточное ПО авторизации для UserController в профиле маршрута.
Назначение промежуточного программного обеспечения в конструкторе контроллера
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class UserController extends Controller { public function __construct() { $this->middleware('auth'); } }
Здесь мы назначаем промежуточное ПО аутентификации, используя метод промежуточного ПО в конструкторе UserController .
пример
Шаг 1 — Добавьте следующие строки кода в файл app / Http / rout.php и сохраните его.
routes.php
<?php Route::get('/usercontroller/path',[ 'middleware' => 'First', 'uses' => 'UserController@showPath' ]);
Шаг 2 — Создайте промежуточное программное обеспечение под названием FirstMiddleware , выполнив следующую строку кода.
php artisan make:middleware FirstMiddleware
Шаг 3 — Добавьте следующий код в метод handle недавно созданного FirstMiddleware в app / Http / Middleware .
FirstMiddleware.php
<?php namespace App\Http\Middleware; use Closure; class FirstMiddleware { public function handle($request, Closure $next) { echo '<br>First Middleware'; return $next($request); } }
Шаг 4 — Создайте промежуточное программное обеспечение под названием SecondMiddleware , выполнив следующую команду.
php artisan make:middleware SecondMiddleware
Шаг 5 — Добавьте следующий код в метод handle недавно созданного SecondMiddleware в app / Http / Middleware .
SecondMiddleware.php
<?php namespace App\Http\Middleware; use Closure; class SecondMiddleware { public function handle($request, Closure $next) { echo '<br>Second Middleware'; return $next($request); } }
Шаг 6 — Создайте контроллер с именем UserController , выполнив следующую строку.
php artisan make:controller UserController --plain
Шаг 7. После успешного выполнения URL вы получите следующий вывод:
Шаг 8 — Скопируйте следующий код в файл app / Http / UserController.php .
приложение / Http / UserController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class UserController extends Controller { public function __construct() { $this->middleware('Second'); } public function showPath(Request $request) { $uri = $request->path(); echo '<br>URI: '.$uri; $url = $request->url(); echo '<br>'; echo 'URL: '.$url; $method = $request->method(); echo '<br>'; echo 'Method: '.$method; } }
Шаг 9 — Теперь запустите внутренний веб-сервер php, выполнив следующую команду, если вы еще не выполнили ее.
php artisan serve
Шаг 10 — Посетите следующий URL.
http://localhost:8000/usercontroller/path
Шаг 11 — Вывод будет выглядеть, как показано на следующем рисунке.
Restful Resource Controllers
Часто при создании приложения нам необходимо выполнять операции CRUD (создание, чтение, обновление, удаление) . Laravel облегчает нам эту работу. Просто создайте контроллер, и Laravel автоматически предоставит все методы для операций CRUD. Вы также можете зарегистрировать единый маршрут для всех методов в файле rout.php.
пример
Шаг 1 — Создайте контроллер MyController , выполнив следующую команду.
php artisan make:controller MyController
Шаг 2 — Добавьте следующий код в
Файл app / Http / Controllers / MyController.php .
приложение / Http / Контроллеры / MyController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class MyController extends Controller { public function index() { echo 'index'; } public function create() { echo 'create'; } public function store(Request $request) { echo 'store'; } public function show($id) { echo 'show'; } public function edit($id) { echo 'edit'; } public function update(Request $request, $id) { echo 'update'; } public function destroy($id) { echo 'destroy'; } }
Шаг 3 — Добавьте следующую строку кода в файл app / Http / rout.php .
приложение / Http / routes.php
Route::resource('my','MyController');
Шаг 4 — Теперь мы регистрируем все методы MyController, регистрируя контроллер с ресурсом. Ниже приведена таблица действий, выполняемых контроллером ресурсов.
глагол | Дорожка | действие | Название маршрута |
---|---|---|---|
ПОЛУЧИТЬ | / мой | индекс | my.index |
ПОЛУЧИТЬ | / Мой / создать | Создайте | my.create |
СООБЩЕНИЕ | / мой | хранить | my.store |
ПОЛУЧИТЬ | /мой мой} | шоу | my.show |
ПОЛУЧИТЬ | / Мой / {мой} / редактировать | редактировать | my.edit |
PUT / PATCH | /мой мой} | Обновить | my.update |
УДАЛЯТЬ | /мой мой} | уничтожить | my.destroy |
Шаг 5 — Попробуйте выполнить URL-адреса, показанные в следующей таблице.
URL | Описание | Выходное изображение |
---|---|---|
HTTP: // локальный: 8000 / мой | Выполняет индексный метод MyController.php | индекс |
HTTP: // локальный: 8000 / мой / создать | Выполняет метод создания MyController.php | Создайте |
HTTP: // локальный: 8000 / меня / 1 | Выполняет метод показа MyController.php | шоу |
HTTP: // локальный: 8000 / мой / 1 / редактировать | Выполняет метод редактирования MyController.php | редактировать |
Неявные контроллеры
Неявные контроллеры позволяют вам определять один маршрут для обработки каждого действия в контроллере. Вы можете определить его в файле route.php с помощью метода Route: controller, как показано ниже.
Route::controller(‘base URI’,’<class-name-of-the-controller>’);
Замените <class-name-of-the-controller> на имя класса, которое вы дали своему контроллеру.
Имя метода контроллера должно начинаться с HTTP-глагола, как get или post. Если вы начнете с get, он будет обрабатывать только запрос get, а если он начинается с post, он будет обрабатывать запрос post. После того, как вы можете использовать HTTP-глагол, вы можете дать любое имя методу, но оно должно соответствовать версии URI в заглавном случае.
пример
Шаг 1 — Выполните приведенную ниже команду, чтобы создать контроллер. Мы сохранили имя класса ImplicitController . Вы можете дать любое имя на ваш выбор.
php artisan make:controller ImplicitController --plain
Шаг 2 — После успешного выполнения шага 1 вы получите следующий вывод —
Шаг 3 — Скопируйте следующий код в
Файл app / Http / Controllers / ImplicitController.php .
приложение / Http / Контроллеры / ImplicitController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class ImplicitController extends Controller { /** * Responds to requests to GET /test */ public function getIndex() { echo 'index method'; } /** * Responds to requests to GET /test/show/1 */ public function getShow($id) { echo 'show method'; } /** * Responds to requests to GET /test/admin-profile */ public function getAdminProfile() { echo 'admin profile method'; } /** * Responds to requests to POST /test/profile */ public function postProfile() { echo 'profile method'; } }
Шаг 4 — Добавьте следующую строку в файл app / Http / rout.php, чтобы направить запросы на указанный контроллер.
приложение / Http / routes.php
Route::controller('test','ImplicitController');
Конструктор Инъекция
Сервисный контейнер Laravel используется для разрешения всех контроллеров Laravel. В результате вы можете напечатать любые зависимости, которые могут понадобиться вашему контроллеру в его конструкторе. Зависимости будут автоматически разрешены и введены в экземпляр контроллера.
пример
Шаг 1 — Добавьте следующий код в файл app / Http / rout.php .
приложение / Http / routes.php
class MyClass{ public $foo = 'bar'; } Route::get('/myclass','ImplicitController@index');
Шаг 2 — Добавьте следующий код в
Файл app / Http / Controllers / ImplicitController.php .
приложение / Http / Контроллеры / ImplicitController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class ImplicitController extends Controller { private $myclass; public function __construct(\MyClass $myclass) { $this->myclass = $myclass; } public function index() { dd($this->myclass); } }
Шаг 3 — Посетите следующий URL, чтобы проверить внедрение конструктора.
http://localhost:8000/myclass
Шаг 4 — Вывод будет выглядеть, как показано на следующем рисунке.
Инъекция метода
В дополнение к внедрению в конструктор, вы также можете ввести — подсказки зависимости от методов действия вашего контроллера.
пример
Шаг 1 — Добавьте следующий код в файл app / Http / rout.php .
приложение / Http / routes.php
class MyClass{ public $foo = 'bar'; } Route::get('/myclass','ImplicitController@index');
Шаг 2 — Добавьте следующий код в
Файл app / Http / Controllers / ImplicitController.php .
приложение / Http / Контроллеры / ImplicitController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class ImplicitController extends Controller { public function index(\MyClass $myclass) { dd($myclass); } }
Шаг 3 — Посетите следующий URL, чтобы проверить внедрение конструктора.
http://localhost:8000/myclass
Это даст следующий результат —
Laravel — Запрос
В этой главе вы подробно узнаете о запросах в Laravel.
Получение URI запроса
Метод «путь» используется для получения запрошенного URI. Метод is используется для получения запрошенного URI, который соответствует конкретному шаблону, указанному в аргументе метода. Чтобы получить полный URL, мы можем использовать метод url .
пример
Шаг 1 — Выполните приведенную ниже команду, чтобы создать новый контроллер с именем UriController .
php artisan make:controller UriController –plain
Шаг 2. После успешного выполнения URL вы получите следующий вывод:
Шаг 3 — После создания контроллера добавьте следующий код в этот файл.
приложение / Http / Контроллеры / UriController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class UriController extends Controller { public function index(Request $request) { // Usage of path method $path = $request->path(); echo 'Path Method: '.$path; echo '<br>'; // Usage of is method $pattern = $request->is('foo/*'); echo 'is Method: '.$pattern; echo '<br>'; // Usage of url method $url = $request->url(); echo 'URL method: '.$url; } }
Шаг 4 — Добавьте следующую строку в файл app / Http / route.php .
приложение / Http / route.php
Route::get('/foo/bar','UriController@index');
Шаг 5 — Посетите следующий URL.
http://localhost:8000/foo/bar
Шаг 6 — Вывод будет выглядеть, как показано на следующем рисунке.
Получение ввода
Входные значения могут быть легко получены в Laravel. Независимо от того, какой метод был использован «get» или «post» , метод Laravel будет извлекать входные значения для обоих методов одинаково. Есть два способа получить входные значения.
- Использование метода input ()
- Использование свойств экземпляра Request
Использование метода input ()
Метод input () принимает один аргумент — имя поля в форме. Например, если форма содержит поле имени пользователя, мы можем получить к нему доступ следующим образом.
$name = $request->input('username');
Использование свойств экземпляра Request
Как и метод input () , мы можем получить свойство username непосредственно из экземпляра запроса.
$request->username
пример
Обратите внимание на следующий пример, чтобы лучше понять запросы.
Шаг 1 — Создайте форму регистрации, где пользователь может зарегистрироваться и сохранить форму в ресурсах / views / register.php
<html> <head> <title>Form Example</title> </head> <body> <form action = "/user/register" method = "post"> <input type = "hidden" name = "_token" value = "<?php echo csrf_token() ?>"> <table> <tr> <td>Name</td> <td><input type = "text" name = "name" /></td> </tr> <tr> <td>Username</td> <td><input type = "text" name = "username" /></td> </tr> <tr> <td>Password</td> <td><input type = "text" name = "password" /></td> </tr> <tr> <td colspan = "2" align = "center"> <input type = "submit" value = "Register" /> </td> </tr> </table> </form> </body> </html>
Шаг 2 — Выполните приведенную ниже команду, чтобы создать контроллер UserRegistration .
php artisan make:controller UserRegistration --plain
Шаг 3 — После успешного выполнения вышеуказанного шага вы получите следующий вывод —
Шаг 4 — Скопируйте следующий код в
app / Http / Controllers / UserRegistration.php контроллер.
приложение / Http / Контроллеры / UserRegistration.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class UserRegistration extends Controller { public function postRegister(Request $request) { //Retrieve the name input field $name = $request->input('name'); echo 'Name: '.$name; echo '<br>'; //Retrieve the username input field $username = $request->username; echo 'Username: '.$username; echo '<br>'; //Retrieve the password input field $password = $request->password; echo 'Password: '.$password; } }
Шаг 5 — Добавьте следующую строку в файл app / Http / rout.php .
приложение / Http / routes.php
Route::get('/register',function() { return view('register'); }); Route::post('/user/register',array('uses'=>'UserRegistration@postRegister'));
Шаг 6 — Посетите следующий URL, и вы увидите форму регистрации, как показано на рисунке ниже. Введите регистрационные данные и нажмите «Регистрация», и вы увидите на второй странице, которую мы получили, и отобразили регистрационные данные пользователя.
http://localhost:8000/register
Шаг 7 — Вывод будет выглядеть примерно так, как показано ниже на следующих изображениях.
Laravel — Cookie
Файлы cookie играют важную роль при создании сеанса пользователя в веб-приложении. В этой главе вы узнаете о работе с файлами cookie в веб-приложениях на основе Laravel.
Создание Cookie
Cookie может быть создан глобальным помощником cookie Laravel. Это экземпляр Symfony \ Component \ HttpFoundation \ Cookie . Куки можно прикрепить к ответу с помощью метода withCookie (). Создайте экземпляр ответа класса Illuminate \ Http \ Response для вызова метода withCookie (). Cookie, сгенерированные Laravel, зашифрованы и подписаны и не могут быть изменены или прочитаны клиентом.
Вот пример кода с объяснением.
//Create a response instance $response = new Illuminate\Http\Response('Hello World'); //Call the withCookie() method with the response method $response->withCookie(cookie('name', 'value', $minutes)); //return the response return $response;
Метод Cookie () будет принимать 3 аргумента. Первый аргумент — это имя куки, второй аргумент — это значение куки, а третий аргумент — это длительность куки, после которой куки будут автоматически удалены.
Cookie можно установить навсегда, используя метод forever, как показано в приведенном ниже коде.
$response->withCookie(cookie()->forever('name', 'value'));
Получение Cookie
После того, как мы установили cookie, мы можем извлечь cookie методом cookie (). Этот метод cookie () будет принимать только один аргумент, который будет именем куки. Метод cookie может быть вызван с использованием экземпляра Illuminate \ Http \ Request .
Вот пример кода.
//’name’ is the name of the cookie to retrieve the value of $value = $request->cookie('name');
пример
Посмотрите на следующий пример, чтобы понять больше о Cookies —
Шаг 1 — Выполните приведенную ниже команду, чтобы создать контроллер, в котором мы будем манипулировать cookie.
php artisan make:controller CookieController --plain
Шаг 2 — После успешного выполнения вы получите следующий вывод —
Шаг 3 — Скопируйте следующий код в
Файл app / Http / Controllers / CookieController.php .
приложение / Http / Контроллеры / CookieController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Http\Response; use App\Http\Requests; use App\Http\Controllers\Controller; class CookieController extends Controller { public function setCookie(Request $request) { $minutes = 1; $response = new Response('Hello World'); $response->withCookie(cookie('name', 'virat', $minutes)); return $response; } public function getCookie(Request $request) { $value = $request->cookie('name'); echo $value; } }
Шаг 4 — Добавьте следующую строку в файл app / Http / rout.php .
приложение / Http / routes.php
Route::get('/cookie/set','CookieController@setCookie'); Route::get('/cookie/get','CookieController@getCookie');
Шаг 5 — Посетите следующий URL, чтобы установить cookie.
http://localhost:8000/cookie/set
Шаг 6 — Вывод будет выглядеть, как показано ниже. Окно, отображаемое на скриншоте, взято из firefox, но в зависимости от вашего браузера cookie также можно проверить с помощью параметра cookie.
Шаг 7. Перейдите по следующему URL-адресу, чтобы получить файл cookie с указанного выше URL-адреса.
http://localhost:8000/cookie/get
Шаг 8 — Вывод будет выглядеть, как показано на следующем рисунке.
Laravel — Ответ
Веб-приложение отвечает на запрос пользователя многими способами в зависимости от многих параметров. В этой главе подробно рассказывается об ответах в веб-приложениях Laravel.
Основной ответ
Laravel предоставляет несколько разных способов возврата ответа. Ответ может быть отправлен либо с маршрута, либо с контроллера. Основной ответ, который можно отправить, — простая строка, как показано в приведенном ниже примере кода. Эта строка будет автоматически преобразована в соответствующий HTTP-ответ.
пример
Шаг 1 — Добавьте следующий код в файл app / Http / rout.php .
приложение / Http / routes.php
Route::get('/basic_response', function () { return 'Hello World'; });
Шаг 2 — Посетите следующий URL, чтобы проверить основной ответ.
http://localhost:8000/basic_response
Шаг 3 — Вывод будет выглядеть, как показано на следующем рисунке.
Присоединение заголовков
Ответ может быть прикреплен к заголовкам с помощью метода header (). Мы также можем прикрепить серию заголовков, как показано в приведенном ниже примере кода.
return response($content,$status) ->header('Content-Type', $type) ->header('X-Header-One', 'Header Value') ->header('X-Header-Two', 'Header Value');
пример
Обратите внимание на следующий пример, чтобы понять больше о Response —
Шаг 1 — Добавьте следующий код в файл app / Http / rout.php .
приложение / Http / routes.php
Route::get('/header',function() { return response("Hello", 200)->header('Content-Type', 'text/html'); });
Шаг 2 — Посетите следующий URL, чтобы проверить основной ответ.
http://localhost:8000/header
Шаг 3 — Вывод будет выглядеть, как показано на следующем рисунке.
Прикрепление куки
Вспомогательный метод withcookie () используется для прикрепления файлов cookie. Куки, сгенерированные с помощью этого метода, могут быть прикреплены путем вызова метода withcookie () с экземпляром ответа. По умолчанию все файлы cookie, сгенерированные Laravel, зашифрованы и подписаны, поэтому они не могут быть изменены или прочитаны клиентом.
пример
Обратите внимание на следующий пример, чтобы понять больше о прикреплении файлов cookie.
Шаг 1 — Добавьте следующий код в файл app / Http / rout.php .
приложение / Http / routes.php
Route::get('/cookie',function() { return response("Hello", 200)->header('Content-Type', 'text/html') ->withcookie('name','Virat Gandhi'); });
Шаг 2 — Посетите следующий URL, чтобы проверить основной ответ.
http://localhost:8000/cookie
Шаг 3 — Вывод будет выглядеть, как показано на следующем рисунке.
JSON Response
Ответ JSON можно отправить с помощью метода json. Этот метод автоматически устанавливает заголовок Content-Type на application / json . Метод json автоматически преобразует массив в соответствующий ответ json .
пример
Обратите внимание на следующий пример, чтобы понять больше о JSON Response —
Шаг 1 — Добавьте следующую строку в файл app / Http / rout.php .
приложение / Http / routes.php
Route::get('json',function() { return response()->json(['name' => 'Virat Gandhi', 'state' => 'Gujarat']); });
Шаг 2 — Посетите следующий URL, чтобы проверить ответ json.
http://localhost:8000/json
Шаг 3 — Вывод будет выглядеть, как показано на следующем рисунке.
Laravel — Просмотров
В рамках MVC буква «V» обозначает « Виды» . Он разделяет логику приложения и логику представления. Представления хранятся в каталоге ресурсов / представлений . Как правило, представление содержит HTML-код, который будет обслуживаться приложением.
пример
Обратите внимание на следующий пример, чтобы понять больше о представлениях —
Шаг 1. Скопируйте следующий код и сохраните его в resources / views / test.php
<html> <body> <h1>Hello, World</h1> </body> </html>
Шаг 2 — Добавьте следующую строку в файл app / Http / rout.php, чтобы установить маршрут для вышеприведенного представления.
приложение / Http / routes.php
Route::get('/test', function() { return view('test'); });
Шаг 3 — Посетите следующий URL, чтобы увидеть выходные данные представления.
http://localhost:8000/test
Шаг 4 — Вывод будет выглядеть, как показано на следующем рисунке.
Передача данных в представления
При создании приложения может потребоваться передать данные в представления. Передайте массив для просмотра вспомогательной функции. После передачи массива мы можем использовать ключ, чтобы получить значение этого ключа в файле HTML.
пример
Обратите внимание на следующий пример, чтобы больше узнать о передаче данных в представления.
Шаг 1. Скопируйте следующий код и сохраните его в resources / views / test.php
<html> <body> <h1><?php echo $name; ?></h1> </body> </html>
Шаг 2 — Добавьте следующую строку в файл app / Http / rout.php, чтобы установить маршрут для вышеприведенного представления.
приложение / Http / routes.php
Route::get('/test', function() { return view('test',[‘name’=>’Virat Gandhi’]); });
Шаг 3 — Значение имени ключа будет передано в файл test.php, и $ name будет заменено этим значением.
Шаг 4 — Посетите следующий URL, чтобы увидеть выходные данные представления.
http://localhost:8000/test
Шаг 5 — Вывод будет выглядеть, как показано на следующем рисунке.
Совместное использование данных со всеми представлениями
Мы видели, как мы можем передавать данные в представления, но иногда необходимо передавать данные во все представления. Laravel делает это проще. Существует метод с именем share (), который можно использовать для этой цели. Метод share () принимает два аргумента, ключ и значение. Обычно метод share () вызывается из загрузочного метода поставщика услуг. Мы можем использовать любого поставщика услуг, AppServiceProvider или нашего собственного поставщика услуг.
пример
Обратите внимание на следующий пример, чтобы больше узнать об обмене данными со всеми представлениями.
Шаг 1 — Добавьте следующую строку в файл app / Http / rout.php .
приложение / Http / routes.php
Route::get('/test', function() { return view('test'); }); Route::get('/test2', function() { return view('test2'); });
Шаг 2 — Создайте два файла вида — test.php и test2.php с одинаковым кодом. Это два файла, которые будут обмениваться данными. Скопируйте следующий код в оба файла. resources / views / test.php & resources / views / test2.php
<html> <body> <h1><?php echo $name; ?></h1> </body> </html>
Шаг 3 — Измените код метода загрузки в файле app / Providers / AppServiceProvider.php, как показано ниже. (Здесь мы использовали метод share, и данные, которые мы передали, будут доступны всем представлениям.) App / Providers / AppServiceProvider.php
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { view()->share('name', 'Virat Gandhi'); } /** * Register any application services. * * @return void */ public function register() { // } }
Шаг 4 — Посетите следующие URL.
http://localhost:8000/test http://localhost:8000/test2
Шаг 5 — Вывод будет выглядеть, как показано на следующем рисунке.
Laravel — Шаблоны Лезвий
Laravel 5.1 представляет концепцию использования Blade , движка шаблонов для разработки уникального макета. Компоновка, разработанная таким образом, может использоваться другими видами и включает в себя согласованный дизайн и структуру.
По сравнению с другими шаблонными движками Blade уникален в следующих отношениях:
-
Это не ограничивает разработчика от использования простого PHP-кода в представлениях.
-
Представленные таким образом виды лезвий компилируются и кэшируются до тех пор, пока не будут изменены.
Это не ограничивает разработчика от использования простого PHP-кода в представлениях.
Представленные таким образом виды лезвий компилируются и кэшируются до тех пор, пока не будут изменены.
Полная структура каталогов Laravel показана на скриншоте, приведенном здесь.
Вы можете заметить, что все представления хранятся в каталоге resources / views и представление по умолчанию для платформы Laravel — welcome.blade.php .
Обратите внимание, что другие шаблоны лезвий также создаются аналогичным образом.
Шаги для создания макета шаблона лезвия
Вам нужно будет выполнить следующие шаги, чтобы создать макет шаблона лезвия —
Шаг 1
-
Создайте папку макета внутри папки resources / views . Мы собираемся использовать эту папку, чтобы хранить все макеты вместе.
-
Создайте имя файла master.blade.php, с которым будет связан следующий код:
Создайте папку макета внутри папки resources / views . Мы собираемся использовать эту папку, чтобы хранить все макеты вместе.
Создайте имя файла master.blade.php, с которым будет связан следующий код:
<html> <head> <title>DemoLaravel - @yield('title')</title> </head> <body> @yield('content') </body> </html>
Шаг 2
На этом этапе вы должны расширить макет. Расширение макета включает в себя определение дочерних элементов. Laravel использует директиву Blade @extends для определения дочерних элементов.
При расширении макета обратите внимание на следующие моменты:
-
Представления, определенные в макете Blade, внедряют контейнер уникальным способом.
-
Различные разделы представления создаются как дочерние элементы.
-
Дочерние элементы хранятся в папке раскладок как child.blade.php
Представления, определенные в макете Blade, внедряют контейнер уникальным способом.
Различные разделы представления создаются как дочерние элементы.
Дочерние элементы хранятся в папке раскладок как child.blade.php
Пример, демонстрирующий расширение макета, созданного выше, показан здесь —
@extends('layouts.app') @section('title', 'Page Title') @section('sidebar') @parent <p>This refers to the master sidebar.</p> @endsection @section('content') <p>This is my body content.</p> @endsection
Шаг 3
Чтобы реализовать дочерние элементы в представлениях, вы должны определить макет так, как он нужен.
Посмотрите на скриншот, показанный здесь. Вы можете обнаружить, что каждая из ссылок, упомянутых на целевой странице, является гиперссылкой. Обратите внимание, что вы также можете создавать их как дочерние элементы с помощью шаблонов блейдов, используя процедуру, описанную выше.
Laravel — Перенаправления
Именованный маршрут используется, чтобы дать конкретное имя маршруту. Имя может быть назначено с помощью ключа массива «as» .
Route::get('user/profile', ['as' => 'profile', function () { // }]);
Примечание. Здесь мы указали имя профиля для пользователя / профиля маршрута.
Перенаправление на именованные маршруты
пример
Обратите внимание на следующий пример, чтобы понять больше о перенаправлении на именованные маршруты.
Шаг 1 — Создайте представление с именем test.php и сохраните его в
resources / views / test.php .
<html> <body> <h1>Example of Redirecting to Named Routes</h1> </body> </html>
Шаг 2 — В файле rout.php мы настроили маршрут для файла test.php . Мы переименовали его в тестирование . Мы также настроили еще одно перенаправление маршрута, которое перенаправит запрос на тестирование именованного маршрута.
приложение / Http / routes.php
Route::get('/test', ['as'=>'testing',function() { return view('test2'); }]); Route::get('redirect',function() { return redirect()->route('testing'); });
Шаг 3 — Посетите следующий URL, чтобы проверить пример именованного маршрута.
http://localhost:8000/redirect
Шаг 4 — После выполнения вышеуказанного URL вы будете перенаправлены на http: // localhost: 8000 / test, так как мы перенаправляем на именованный маршрут тестирования .
Шаг 5. После успешного выполнения URL вы получите следующий вывод:
Перенаправление на действия контроллера
Не только именованный маршрут, но мы также можем перенаправить на действия контроллера. Нам нужно просто передать контроллер и имя действия методу действия, как показано в следующем примере. Если вы хотите передать параметр, вы можете передать его как второй аргумент метода действия.
return redirect()->action(‘NameOfController@methodName’,[parameters]);
пример
Шаг 1 — Выполните следующую команду, чтобы создать контроллер с именем RedirectController .
php artisan make:controller RedirectController --plain
Шаг 2 — После успешного выполнения вы получите следующий вывод —
Шаг 3 — Скопируйте следующий код в файл
app / Http / Controllers / RedirectController.php .
приложение / Http / Контроллеры / RedirectController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class RedirectController extends Controller { public function index() { echo "Redirecting to controller's action."; } }
Шаг 4 — Добавьте следующие строки в app / Http / rout.php .
приложение / Http / routes.php
Route::get('rr','RedirectController@index'); Route::get('/redirectcontroller',function() { return redirect()->action('RedirectController@index'); });
Шаг 5 — Посетите следующий URL, чтобы проверить пример.
http://localhost:8000/redirectcontroller
Шаг 6 — Вывод будет выглядеть, как показано на следующем рисунке.
Laravel — Работа с базой данных
Laravel сделал обработку с базой данных очень простой. Laravel в настоящее время поддерживает следующие 4 базы данных —
- MySQL
- Postgres
- SQLite
- SQL Server
Запрос к базе данных может быть запущен с использованием необработанного SQL, свободного построителя запросов и Eloquent ORM. Чтобы понять все операции CRUD (создание, чтение, обновление, удаление) с Laravel, мы будем использовать простую систему управления студентами.
Подключение к базе данных
Сконфигурируйте базу данных в файле config / database.php и создайте базу данных колледжа со структурой в MySQL, как показано в следующей таблице.
База данных: Колледж
Стол: студент
Название столбца | Тип столбца | дополнительный |
---|---|---|
Я бы | INT (11) | Первичный ключ | Автоматическое приращение |
название | VARCHAR (25) |
Мы увидим, как добавлять, удалять, обновлять и извлекать записи из базы данных, используя Laravel в таблице учеников.
Sr.No. | Запись и описание |
---|---|
1 | Вставить записи
Мы можем вставить запись, используя фасад БД с методом вставки. |
2 | Получить записи
После настройки базы данных мы можем получить записи, используя фасад БД с методом select. |
3 | Обновить записи
Мы можем обновить записи, используя фасад БД с методом обновления. |
4 | Удалить записи
Мы можем удалить запись, используя фасад БД с помощью метода delete. |
Мы можем вставить запись, используя фасад БД с методом вставки.
После настройки базы данных мы можем получить записи, используя фасад БД с методом select.
Мы можем обновить записи, используя фасад БД с методом обновления.
Мы можем удалить запись, используя фасад БД с помощью метода delete.
Laravel — Ошибки и регистрация
В этой главе рассматриваются ошибки и регистрация в проектах Laravel, а также способы их устранения.
ошибки
Проект в процессе реализации несет несколько ошибок. Обработка ошибок и исключений уже настроена для вас при запуске нового проекта Laravel. Обычно в локальной среде мы должны видеть ошибки для целей отладки. Нам нужно скрывать эти ошибки от пользователей в производственной среде. Это может быть достигнуто с помощью переменной APP_DEBUG, установленной в файле среды .env, хранящемся в корне приложения.
Для локальной среды значение APP_DEBUG должно быть истинным, но для производства его нужно установить в ложное, чтобы скрыть ошибки.
Примечание. После изменения переменной APP_DEBUG необходимо перезапустить сервер Laravel.
логирование
Ведение журнала является важным механизмом, с помощью которого система может регистрировать сгенерированные ошибки. Это полезно для повышения надежности системы. Laravel поддерживает различные режимы журналирования, такие как режимы одиночного, ежедневного, системного журнала и журнала ошибок. Вы можете установить эти режимы в файле config / app.php .
'log' => 'daily'
Вы можете увидеть сгенерированные записи журнала в файле storage / logs / laravel.log .
Laravel — Формы
Laravel предоставляет различные встроенные теги для простой и безопасной обработки HTML-форм. Все основные элементы HTML генерируются с использованием Laravel. Для поддержки этого нам нужно добавить пакет HTML в Laravel, используя composer.
Пример 1
Шаг 1 — Выполните следующую команду, чтобы продолжить то же самое.
composer require illuminate/html
Шаг 2 — Это добавит пакет HTML в Laravel, как показано на следующем рисунке.
Шаг 3 — Теперь нам нужно добавить указанный выше пакет в файл конфигурации Laravel, который хранится в config / app.php. Откройте этот файл, и вы увидите список поставщиков услуг Laravel, как показано на следующем рисунке. Добавьте поставщика услуг HTML, как указано в рамке, приведенной на следующем рисунке.
Шаг 4 — Добавьте псевдонимы в один файл для HTML и Form. Обратите внимание на две строки, указанные в обведенном поле на следующем изображении, и добавьте эти две строки.
Шаг 5 — Теперь все настроено. Давайте посмотрим, как мы можем использовать различные элементы HTML, используя теги Laravel.
Открытие формы
{{ Form::open(array('url' => 'foo/bar')) }} // {{ Form::close() }}
Генерация элемента метки
echo Form::label('email', 'E-Mail Address');
Генерация ввода текста
echo Form::text('username');
Указание значения по умолчанию
echo Form::text('email', '[email protected]');
Генерация ввода пароля
echo Form::password('password');
Генерация файлового ввода
echo Form::file('image');
Генерация флажка или радиовхода
echo Form::checkbox('name', 'value'); echo Form::radio('name', 'value');
Генерация флажка или радиовхода, который проверяется
echo Form::checkbox('name', 'value', true); echo Form::radio('name', 'value', true);
Генерация выпадающего списка
echo Form::select('size', array('L' => 'Large', 'S' => 'Small'));
Создание кнопки отправки
echo Form::submit('Click Me!');
Пример 2
Шаг 1 — Скопируйте следующий код, чтобы создать представление под названием
resources / views / form.php .
ресурсы / виды / form.php
<html> <body> <?php echo Form::open(array('url' => 'foo/bar')); echo Form::text('username','Username'); echo '<br/>'; echo Form::text('email', '[email protected]'); echo '<br/>'; echo Form::password('password'); echo '<br/>'; echo Form::checkbox('name', 'value'); echo '<br/>'; echo Form::radio('name', 'value'); echo '<br/>'; echo Form::file('image'); echo '<br/>'; echo Form::select('size', array('L' => 'Large', 'S' => 'Small')); echo '<br/>'; echo Form::submit('Click Me!'); echo Form::close(); ?> </body> </html>
Шаг 2 — Добавьте следующую строку в app / Http / rout.php, чтобы добавить маршрут для просмотра form.php
приложение / Http / routes.php
Route::get('/form',function() { return view('form'); });
Шаг 3 — Посетите следующий URL, чтобы увидеть форму.
http://localhost:8000/form
Шаг 4 — Вывод будет выглядеть, как показано на следующем рисунке.
Laravel — Локализация
Функция локализации Laravel поддерживает другой язык, который будет использоваться в приложении. Вам нужно хранить все строки на разных языках в файле, и эти файлы хранятся в каталоге resources / views . Вы должны создать отдельный каталог для каждого поддерживаемого языка. Все языковые файлы должны возвращать массив строк с ключами, как показано ниже.
<?php return [ 'welcome' => 'Welcome to the application' ];
пример
Шаг 1 — Создайте 3 файла для языков — английский, французский и немецкий . Сохраните файл на английском языке в ресурсах / lang / en / lang.php
<?php return [ 'msg' => 'Laravel Internationalization example.' ]; ?>
Шаг 2 — Сохраните французский файл в ресурсах / lang / fr / lang.php .
<?php return [ 'msg' => 'Exemple Laravel internationalisation.' ]; ?>
Шаг 3 — Сохраните немецкий файл в ресурсах / lang / de / lang.php .
<?php return [ 'msg' => 'Laravel Internationalisierung Beispiel.' ]; ?>
Шаг 4 — Создайте контроллер с именем LocalizationController , выполнив следующую команду.
php artisan make:controller LocalizationController --plain
Шаг 5 — После успешного выполнения вы получите следующий вывод —
Шаг 6 — Скопируйте следующий код в файл
приложение / Http / Контроллеры / LocalizationController.php
приложение / Http / Контроллеры / LocalizationController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class LocalizationController extends Controller { public function index(Request $request,$locale) { //set’s application’s locale app()->setLocale($locale); //Gets the translated message and displays it echo trans('lang.msg'); } }
Шаг 7 — Добавьте маршрут для LocalizationController в файле app / Http / rout.php . Обратите внимание, что мы передаем аргумент {locale} после локализации /, который мы будем использовать, чтобы увидеть вывод на другом языке.
приложение / Http / routes.php
Route::get('localization/{locale}','LocalizationController@index');
Шаг 8 — Теперь давайте посетим разные URL, чтобы увидеть все разные языки. Выполните приведенный ниже URL, чтобы увидеть вывод на английском языке.
http://localhost:8000/localization/en
Шаг 9 — Вывод будет выглядеть, как показано на следующем рисунке.
Шаг 10 — Выполните приведенный ниже URL, чтобы увидеть вывод на французском языке.
http://localhost:8000/localization/fr
Шаг 11 — Вывод будет выглядеть, как показано на следующем рисунке.
Шаг 12 — Выполните приведенный ниже URL, чтобы увидеть вывод на немецком языке
http://localhost:8000/localization/de
Шаг 13 — Вывод будет выглядеть, как показано на следующем рисунке.
Laravel — Сессия
Сеансы используются для хранения информации о пользователе по всем запросам. Laravel предоставляет различные драйверы, такие как файл, cookie, apc, массив, Memcached, Redis и база данных для обработки данных сеанса. По умолчанию используется драйвер файла, потому что он легкий. Сессия может быть настроена в файле, хранящемся в config / session.php .
Доступ к данным сеанса
Чтобы получить доступ к данным сеанса, нам нужен экземпляр сеанса, к которому можно получить доступ через HTTP-запрос. После получения экземпляра мы можем использовать метод get () , который получит один аргумент «ключ» для получения данных сеанса.
$value = $request->session()->get('key');
Вы можете использовать метод all () для получения всех данных сеанса вместо метода get () .
Хранение данных сеанса
Данные могут храниться в сеансе с использованием метода put () . Метод put () будет принимать два аргумента: «ключ» и «значение» .
$request->session()->put('key', 'value');
Удаление данных сеанса
Метод Forgot () используется для удаления элемента из сеанса. Этот метод примет «ключ» в качестве аргумента.
$request->session()->forget('key');
Используйте метод flush () вместо метода Forgot (), чтобы удалить все данные сеанса. Используйте метод pull () для извлечения данных из сеанса и последующего удаления. Метод pull () также будет принимать ключ в качестве аргумента. Разница между методом Forgot () и методом pull () заключается в том, что метод Forgot () не возвращает значение сеанса, а метод pull () возвращает его и удаляет это значение из сеанса.
пример
Шаг 1 — Создайте контроллер с именем SessionController , выполнив следующую команду.
php artisan make:controller SessionController --plain
Шаг 2 — После успешного выполнения вы получите следующий вывод —
Шаг 3 — Скопируйте следующий код в файл по адресу
приложение / Http / Контроллеры / SessionController.php.
приложение / Http / Контроллеры / SessionController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class SessionController extends Controller { public function accessSessionData(Request $request) { if($request->session()->has('my_name')) echo $request->session()->get('my_name'); else echo 'No data in the session'; } public function storeSessionData(Request $request) { $request->session()->put('my_name','Virat Gandhi'); echo "Data has been added to session"; } public function deleteSessionData(Request $request) { $request->session()->forget('my_name'); echo "Data has been removed from session."; } }
Шаг 4 — Добавьте следующие строки в файл app / Http / rout.php .
приложение / Http / routes.php
Route::get('session/get','SessionController@accessSessionData'); Route::get('session/set','SessionController@storeSessionData'); Route::get('session/remove','SessionController@deleteSessionData');
Шаг 5 — Посетите следующий URL, чтобы установить данные в сеансе .
http://localhost:8000/session/set
Шаг 6 — Вывод будет выглядеть, как показано на следующем рисунке.
Шаг 7 — Посетите следующий URL, чтобы получить данные из сеанса .
http://localhost:8000/session/get
Шаг 8 — Вывод будет выглядеть, как показано на следующем рисунке.
Шаг 9 — Посетите следующий URL, чтобы удалить данные сеанса .
http://localhost:8000/session/remove
Шаг 10 — Вы увидите сообщение, как показано на следующем рисунке.
Laravel — валидация
Валидация является наиболее важным аспектом при разработке приложения. Он проверяет поступающие данные. По умолчанию базовый класс контроллера использует черту ValidatesRequests, которая предоставляет удобный метод для проверки входящих HTTP-запросов с помощью множества мощных правил проверки.
Доступные правила проверки в Laravel
Laravel всегда проверяет наличие ошибок в данных сеанса и автоматически связывает их с представлением, если они доступны. Таким образом, важно отметить, что переменная $ errors всегда будет доступна во всех ваших представлениях при каждом запросе, что позволяет вам удобно предполагать, что переменная $ errors всегда определена и может безопасно использоваться. В следующей таблице приведены все доступные правила проверки в Laravel.
Доступные правила проверки в Laravel | ||
---|---|---|
Принято | Активный URL | После (Дата) |
Альфа | Альфа Дэш | Альфа Числовой |
массив | До (Дата) | Между |
логический | подтвердил | Дата |
Формат даты | Разные | Digits |
Цифры между | Эл. почта | Существует (база данных) |
Файл изображения) | В | целое число |
Айпи адрес | JSON | Максимум |
MIME Типы (Файл) | Min | Не в |
числовой | Регулярное выражение | необходимые |
Требуется, если | Требуется, если только | Требуется с |
Требуется со всеми | Требуется без | Требуется без всего |
Так же | Размер | строка |
Часовой пояс | Уникальный (База данных) | URL |
Переменная $ errors будет экземпляром Illuminate \ Support \ MessageBag . Сообщение об ошибке может быть отображено в файле представления, добавив код, как показано ниже.
@if (count($errors) > 0) <div class = "alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
пример
Шаг 1 — Создайте контроллер под названием ValidationController , выполнив следующую команду.
php artisan make:controller ValidationController --plain
Шаг 2 — После успешного выполнения вы получите следующий вывод —
Шаг 3 — Скопируйте следующий код в
Файл app / Http / Controllers / ValidationController.php .
приложение / Http / Контроллеры / ValidationController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class ValidationController extends Controller { public function showform() { return view('login'); } public function validateform(Request $request) { print_r($request->all()); $this->validate($request,[ 'username'=>'required|max:8', 'password'=>'required' ]); } }
Шаг 4 — Создайте файл представления с именем resources / views / login.blade.php и скопируйте следующий код в этот файл.
ресурсы / виды / login.blade.php
<html> <head> <title>Login Form</title> </head> <body> @if (count($errors) > 0) <div class = "alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <?php echo Form::open(array('url'=>'/validation')); ?> <table border = '1'> <tr> <td align = 'center' colspan = '2'>Login</td> </tr> <tr> <td>Username</td> <td><?php echo Form::text('username'); ?></td> </tr> <tr> <td>Password</td> <td><?php echo Form::password('password'); ?></td> </tr> <tr> <td align = 'center' colspan = '2' ><?php echo Form::submit('Login'); ? ></td> </tr> </table> <?php echo Form::close(); ?> </body> </html>
Шаг 5 — Добавьте следующие строки в app / Http / rout.php .
приложение / Http / routes.php
Route::get('/validation','ValidationController@showform'); Route::post('/validation','ValidationController@validateform');
Шаг 6 — Посетите следующий URL для проверки правильности.
http://localhost:8000/validation
Шаг 7 — Нажмите кнопку «Войти» , не вводя ничего в текстовое поле. Вывод будет таким, как показано на следующем рисунке.
Laravel — Загрузка файлов
Загрузка файлов в Laravel очень проста. Все, что нам нужно сделать, — это создать файл представления, в котором пользователь может выбрать файл для загрузки, и контроллер, где будут обрабатываться загруженные файлы.
В файле представления нам нужно создать входной файл, добавив следующую строку кода.
Form::file('file_name');
В Form :: open () нам нужно добавить ‘files’ => ‘true’, как показано ниже. Это облегчает загрузку формы из нескольких частей.
Form::open(array('url' => '/uploadfile','files'=>'true'));
пример
Шаг 1 — Создайте файл представления с именем resources / views / uploadfile.php и скопируйте следующий код в этот файл.
ресурсы / виды / uploadfile.php
<html> <body> <?php echo Form::open(array('url' => '/uploadfile','files'=>'true')); echo 'Select the file to upload.'; echo Form::file('image'); echo Form::submit('Upload File'); echo Form::close(); ?> </body> </html>
Шаг 2 — Создайте контроллер с именем UploadFileController , выполнив следующую команду.
php artisan make:controller UploadFileController --plain
Шаг 3 — После успешного выполнения вы получите следующий вывод —
Шаг 4 — Скопируйте следующий код в
Файл app / Http / Controllers / UploadFileController.php .
приложение / Http / Контроллеры / UploadFileController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class UploadFileController extends Controller { public function index() { return view('uploadfile'); } public function showUploadFile(Request $request) { $file = $request->file('image'); //Display File Name echo 'File Name: '.$file->getClientOriginalName(); echo '<br>'; //Display File Extension echo 'File Extension: '.$file->getClientOriginalExtension(); echo '<br>'; //Display File Real Path echo 'File Real Path: '.$file->getRealPath(); echo '<br>'; //Display File Size echo 'File Size: '.$file->getSize(); echo '<br>'; //Display File Mime Type echo 'File Mime Type: '.$file->getMimeType(); //Move Uploaded File $destinationPath = 'uploads'; $file->move($destinationPath,$file->getClientOriginalName()); } }
Шаг 5 — Добавьте следующие строки в app / Http / rout.php .
приложение / Http / routes.php
Route::get('/uploadfile','UploadFileController@index'); Route::post('/uploadfile','UploadFileController@showUploadFile');
Шаг 6 — Посетите следующий URL, чтобы проверить работоспособность загружаемого файла.
http://localhost:8000/uploadfile
Шаг 7 — Вы получите приглашение, как показано на следующем рисунке.
Laravel — Отправка электронной почты
Laravel использует бесплатную многофункциональную библиотеку SwiftMailer для отправки электронных писем. Используя функцию библиотеки, мы можем легко отправлять электронные письма без особых хлопот. Шаблоны электронной почты загружаются так же, как и представления, что означает, что вы можете использовать синтаксис Blade и вводить данные в свои шаблоны.
Следующая таблица показывает синтаксис и атрибуты функции отправки —
Синтаксис | void send (строка | массив $ view, массив $ data, Closure | строка $ callback) |
параметры |
|
Возвращает | ничего такого |
Описание | Отправляет электронную почту. |
$ view (string | array) — имя представления, которое содержит сообщение электронной почты
$ data (array) — массив данных для передачи на просмотр
$ callback — обратный вызов Closure, который получает экземпляр сообщения, позволяя настраивать получателей, тему и другие аспекты почтового сообщения.
В третьем аргументе $ callback closure получил экземпляр сообщения, и с этим экземпляром мы также можем вызвать следующие функции и изменить сообщение, как показано ниже.
- $ message → subject («Добро пожаловать в пункт учебников»);
- $ message → from (’[email protected] ‘,’ Mr. Example ‘);
- $ message → to (’[email protected] ‘,’ Mr. Example ‘);
Некоторые из менее распространенных методов включают в себя —
- $ message → sender (’[email protected] ‘,’ Mr. Example ‘);
- $ message → returnPath (’[email protected] ‘);
- $ message → cc (’[email protected] ‘,’ Mr. Example ‘);
- $ message → bcc (’[email protected] ‘,’ Mr. Example ‘);
- $ message → replyTo (’[email protected] ‘,’ Mr. Example ‘);
- $ сообщение → приоритет (2);
Чтобы прикрепить или встроить файлы, вы можете использовать следующие методы —
- $ message → attach (‘путь / к / attachment.txt’);
- $ message → embed (‘path / to / attachment.jpg’);
Почту можно отправлять в виде HTML или текста. Вы можете указать тип почты, которую вы хотите отправить в первом аргументе, передав массив, как показано ниже. Тип по умолчанию — HTML. Если вы хотите отправить текстовое сообщение, используйте следующий синтаксис.
Синтаксис
Mail::send([‘text’=>’text.view’], $data, $callback);
В этом синтаксисе первый аргумент принимает массив. Используйте текст в качестве имени ключа представления в качестве значения ключа.
пример
Шаг 1. Теперь мы отправим электронное письмо из учетной записи Gmail, для чего вам необходимо настроить свою учетную запись Gmail в файле среды Laravel — файле .env . Включите двухэтапную проверку в своей учетной записи Gmail и создайте специальный пароль приложения, а затем измените параметры .env, как показано ниже.
.env
MAIL_DRIVER = smtp MAIL_HOST = smtp.gmail.com MAIL_PORT = 587 MAIL_USERNAME = your-gmail-username MAIL_PASSWORD = your-application-specific-password MAIL_ENCRYPTION = tls
Шаг 2 — После изменения файла .env выполните две приведенные ниже команды, чтобы очистить кэш и перезапустить сервер Laravel.
php artisan config:cache
Шаг 3 — Создайте контроллер с именем MailController , выполнив следующую команду.
php artisan make:controller MailController --plain
Шаг 4 — После успешного выполнения вы получите следующий вывод —
Шаг 5 — Скопируйте следующий код в
Файл app / Http / Controllers / MailController.php .
приложение / Http / Контроллеры / MailController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Mail; use App\Http\Requests; use App\Http\Controllers\Controller; class MailController extends Controller { public function basic_email() { $data = array('name'=>"Virat Gandhi"); Mail::send(['text'=>'mail'], $data, function($message) { $message->to('[email protected]', 'Tutorials Point')->subject ('Laravel Basic Testing Mail'); $message->from('[email protected]','Virat Gandhi'); }); echo "Basic Email Sent. Check your inbox."; } public function html_email() { $data = array('name'=>"Virat Gandhi"); Mail::send('mail', $data, function($message) { $message->to('[email protected]', 'Tutorials Point')->subject ('Laravel HTML Testing Mail'); $message->from('[email protected]','Virat Gandhi'); }); echo "HTML Email Sent. Check your inbox."; } public function attachment_email() { $data = array('name'=>"Virat Gandhi"); Mail::send('mail', $data, function($message) { $message->to('[email protected]', 'Tutorials Point')->subject ('Laravel Testing Mail with Attachment'); $message->attach('C:\laravel-master\laravel\public\uploads\image.png'); $message->attach('C:\laravel-master\laravel\public\uploads\test.txt'); $message->from('[email protected]','Virat Gandhi'); }); echo "Email Sent with attachment. Check your inbox."; } }
Шаг 6 — Скопируйте следующий код в файл resources / views / mail.blade.php .
ресурсы / виды / mail.blade.php
<h1>Hi, {{ $name }}</h1> l<p>Sending Mail from Laravel.</p>
Шаг 7 — Добавьте следующие строки в app / Http / rout.php.
приложение / Http / routes.php
Route::get('sendbasicemail','MailController@basic_email'); Route::get('sendhtmlemail','MailController@html_email'); Route::get('sendattachmentemail','MailController@attachment_email');
Шаг 8 — Посетите следующий URL, чтобы проверить основную электронную почту.
http://localhost:8000/sendbasicemail
Шаг 9 — Экран вывода будет выглядеть примерно так. Проверьте свой почтовый ящик, чтобы увидеть основной вывод электронной почты.
Шаг 10 — Посетите следующий URL, чтобы проверить электронную почту в формате HTML.
http://localhost:8000/sendhtmlemail
Шаг 11 — Экран вывода будет выглядеть примерно так. Проверьте свой почтовый ящик, чтобы увидеть HTML-вывод электронной почты.
Шаг 12 — Посетите следующий URL, чтобы проверить HTML-письмо с вложением.
http://localhost:8000/sendattachmentemail
Шаг 13 — Вы можете увидеть следующий вывод
Примечание. В файле MailController.php адрес электронной почты в методе from должен быть адресом электронной почты, с которого вы можете отправить адрес электронной почты. Как правило, это должен быть адрес электронной почты, настроенный на вашем сервере.
Ларавел — Аякс
Ajax (асинхронный JavaScript и XML) представляет собой набор методов веб-разработки, использующих множество веб-технологий, используемых на стороне клиента для создания асинхронных веб-приложений. Импортируйте библиотеку jquery в ваш файл представления, чтобы использовать функции jjery ajax, которые будут использоваться для отправки и получения данных с помощью ajax с сервера. На стороне сервера вы можете использовать функцию response () для отправки ответа клиенту, а для отправки ответа в формате JSON вы можете связать функцию response с помощью функции json ().
Синтаксис функции json ()
json(string|array $data = array(), int $status = 200, array $headers = array(), int $options)
пример
Шаг 1 — Создайте файл представления с именем resources / views / message.php и скопируйте следующий код в этот файл.
<html> <head> <title>Ajax Example</title> <script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"> </script> <script> function getMessage() { $.ajax({ type:'POST', url:'/getmsg', data:'_token = <?php echo csrf_token() ?>', success:function(data) { $("#msg").html(data.msg); } }); } </script> </head> <body> <div id = 'msg'>This message will be replaced using Ajax. Click the button to replace the message.</div> <?php echo Form::button('Replace Message',['onClick'=>'getMessage()']); ?> </body> </html>
Шаг 2 — Создайте контроллер с именем AjaxController , выполнив следующую команду.
php artisan make:controller AjaxController --plain
Шаг 3 — После успешного выполнения вы получите следующий вывод —
Шаг 4 — Скопируйте следующий код в
Файл app / Http / Controllers / AjaxController.php .
приложение / Http / Контроллеры / AjaxController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class AjaxController extends Controller { public function index() { $msg = "This is a simple message."; return response()->json(array('msg'=> $msg), 200); } }
Шаг 5 — Добавьте следующие строки в app / Http / rout.php .
приложение / Http / routes.php
Route::get('ajax',function() { return view('message'); }); Route::post('/getmsg','AjaxController@index');
Шаг 6 — Посетите следующий URL, чтобы проверить функциональность Ajax.
http://localhost:8000/ajax
Шаг 7 — Вы будете перенаправлены на страницу, где вы увидите сообщение, как показано на следующем рисунке.
Шаг 8 — После нажатия кнопки результат будет выглядеть, как показано на следующем рисунке.
Laravel — Обработка ошибок
Большинство веб-приложений имеют специальные механизмы для обработки ошибок. Используя их, они отслеживают ошибки и исключения и регистрируют их для анализа производительности. В этой главе вы прочтете об обработке ошибок в приложениях Laravel.
Важные моменты
Прежде чем продолжить, чтобы подробно узнать об обработке ошибок в Laravel, обратите внимание на следующие важные моменты:
-
Для любого нового проекта Laravel по умолчанию регистрирует ошибки и исключения в классе App \ Exceptions \ Handler . Затем они отправляются обратно пользователю для анализа.
-
Когда ваше приложение Laravel переведено в режим отладки, подробные сообщения об ошибках со следами стека будут отображаться при каждой ошибке, возникающей в вашем веб-приложении.
Для любого нового проекта Laravel по умолчанию регистрирует ошибки и исключения в классе App \ Exceptions \ Handler . Затем они отправляются обратно пользователю для анализа.
Когда ваше приложение Laravel переведено в режим отладки, подробные сообщения об ошибках со следами стека будут отображаться при каждой ошибке, возникающей в вашем веб-приложении.
-
По умолчанию режим отладки установлен на false, и вы можете изменить его на true . Это позволяет пользователю отслеживать все ошибки со следами стека.
По умолчанию режим отладки установлен на false, и вы можете изменить его на true . Это позволяет пользователю отслеживать все ошибки со следами стека.
-
Конфигурация проекта Laravel включает опцию отладки, которая определяет, сколько информации об ошибке должно быть отображено пользователю. По умолчанию в веб-приложении для этого параметра установлено значение, определенное в переменных среды файла .env .
-
Значение имеет значение true в локальной среде разработки и значение false в производственной среде.
-
Если значение равно true в производственной среде, риск передачи конфиденциальной информации конечным пользователям выше.
-
Конфигурация проекта Laravel включает опцию отладки, которая определяет, сколько информации об ошибке должно быть отображено пользователю. По умолчанию в веб-приложении для этого параметра установлено значение, определенное в переменных среды файла .env .
Значение имеет значение true в локальной среде разработки и значение false в производственной среде.
Если значение равно true в производственной среде, риск передачи конфиденциальной информации конечным пользователям выше.
Журнал ошибок
Регистрация ошибок в веб-приложении помогает отслеживать их и при планировании стратегии их устранения. Информация журнала может быть настроена в веб-приложении в файле config / app.php . Обратите внимание на следующие моменты при работе с журналом ошибок в Laravel —
-
Laravel использует библиотеку монологов PHP.
-
Параметры ведения журнала, используемые для отслеживания ошибок: single, daily, syslog и errorlog .
-
Например, если вы хотите регистрировать сообщения об ошибках в файлах журналов, вы должны установить значение журнала в конфигурации вашего приложения на ежедневный, как показано в приведенной ниже команде —
Laravel использует библиотеку монологов PHP.
Параметры ведения журнала, используемые для отслеживания ошибок: single, daily, syslog и errorlog .
Например, если вы хотите регистрировать сообщения об ошибках в файлах журналов, вы должны установить значение журнала в конфигурации вашего приложения на ежедневный, как показано в приведенной ниже команде —
'log' => env('APP_LOG',’daily’),
-
Если в качестве параметра выбран режим ежедневного журнала, Laravel по умолчанию принимает журнал ошибок в течение 5 дней . Если вы хотите изменить максимальное количество файлов журнала, вам необходимо установить для параметра log_max_files в файле конфигурации желаемое значение.
Если в качестве параметра выбран режим ежедневного журнала, Laravel по умолчанию принимает журнал ошибок в течение 5 дней . Если вы хотите изменить максимальное количество файлов журнала, вам необходимо установить для параметра log_max_files в файле конфигурации желаемое значение.
‘log_max_files’ => 25;
Уровни серьезности
Поскольку Laravel использует библиотеку журналов PHP Monolog, для анализа уровней серьезности используются различные параметры. Доступны различные уровни серьезности: сообщения об ошибках, критические, аварийные и аварийные сообщения . Вы можете установить уровень серьезности, как показано в команде ниже —
'log_level' => env('APP_LOG_LEVEL', 'error')
Laravel — Обработка событий
События обеспечивают простую реализацию наблюдателя, которая позволяет пользователю подписываться и прослушивать различные события, запускаемые в веб-приложении. Все классы событий в Laravel хранятся в папке app / Events, а слушатели — в папке app / Listeners .
Команда artisan для генерации событий и слушателей в вашем веб-приложении показана ниже —
php artisan event:generate
Эта команда генерирует события и прослушиватели для соответствующих папок, как описано выше.
События и прослушиватели служат отличным способом развязки веб-приложения, поскольку одно событие может иметь несколько прослушивателей, которые не зависят друг от друга. Папка событий, созданная командой artisan, содержит следующие два файла: event.php и SomeEvent.php. Они показаны здесь —
Event.php
<?php namespace App\Events; abstract class Event{ // }
Как упоминалось выше, event.php включает базовое определение класса Event и вызывает пространство имен App \ Events . Обратите внимание, что пользовательские или пользовательские события создаются в этом файле.
SomeEvent.php
<?php namespace App\Events; use App\Events\Event; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; class SomeEvent extends Event{ use SerializesModels; /** * Create a new event instance. * * @return void */ public function __construct() { // } /** * Get the channels the event should be broadcast on. * * @return array */ public function broadcastOn() { return []; } }
Обратите внимание, что этот файл использует сериализацию для трансляции событий в веб-приложении и что необходимые параметры также инициализируются в этом файле.
Например, если нам нужно инициализировать переменную порядка в конструкторе для регистрации события, мы можем сделать это следующим образом:
public function __construct(Order $order) { $this->order = $order; }
Слушатели
Слушатели обрабатывают все действия, упомянутые в событии, которое регистрируется. Событие команды artisan : generate создает всех слушателей в каталоге app / listeners . Папка Listeners содержит файл EventListener.php, в котором есть все методы, необходимые для обработки слушателей.
EventListener.php
<?php namespace App\Listeners; use App\Events\SomeEvent; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; class EventListener{ /** * Create the event listener. * * @return void */ public function __construct() { // } /** * Handle the event. * * @param SomeEvent $event * @return void */ public function handle(SomeEvent $event) { // } }
Как уже упоминалось в коде, он включает в себя функцию handle для управления различными событиями. Мы можем создавать различных независимых слушателей, которые нацелены на одно событие.
Laravel — Фасады
Фасады предоставляют статический интерфейс для классов, которые доступны в контейнере службы приложения. Фасады Laravel служат в качестве статических посредников для базовых классов в контейнере служб, обеспечивая преимущество краткого, выразительного синтаксиса, сохраняя при этом большую тестируемость и гибкость, чем традиционные статические методы.
Как создать Фасад
Ниже приведены шаги для создания Фасад в Laravel —
-
Шаг 1 — Создать файл класса PHP.
-
Шаг 2 — Привязать этот класс к поставщику услуг.
-
Шаг 3 — Зарегистрируйте этого ServiceProvider для
Config \ app.php в качестве провайдеров.
-
Шаг 4 — Создать класс, который распространяется на этот класс
lluminate \ Support \ Фасады \ Фасад.
-
Шаг 5 — Зарегистрируйте пункт 4 в Config \ app.php как псевдонимы.
Шаг 1 — Создать файл класса PHP.
Шаг 2 — Привязать этот класс к поставщику услуг.
Шаг 3 — Зарегистрируйте этого ServiceProvider для
Config \ app.php в качестве провайдеров.
Шаг 4 — Создать класс, который распространяется на этот класс
lluminate \ Support \ Фасады \ Фасад.
Шаг 5 — Зарегистрируйте пункт 4 в Config \ app.php как псевдонимы.
Ссылка на класс фасадов
Laravel поставляется с множеством фасадов. В следующей таблице показаны встроенные ссылки на класс Facade —
Фасад | Учебный класс | Привязка сервисного контейнера |
---|---|---|
Приложение | Осветить \ Foundation \ Application | приложение |
ремесленник | Осветить \ Контракты \ Console \ Kernel | ремесленник |
Auth | Осветить \ Auth \ AuthManager | авт |
Auth (экземпляр) | Осветить \ Auth \ Guard | |
лопасть | Осветить \ View \ Составители \ BladeCompiler | blade.compiler |
автобус | Осветить \ Контракты \ Bus \ Dispatcher | |
кэш | Осветить \ Cache \ Repository | кэш |
конфиг | Осветить \ Config \ Repository | конфиг |
печенье | Осветить \ Cookie \ CookieJar | печенье |
крипта | Осветить \ Encryption \ Encrypter | Encrypter |
база данных | Осветить \ Database \ DatabaseManager | децибел |
БД (Экземпляр) | Осветить \ Database \ Connection | |
Событие | Осветить \ События \ грузоотправитель | События |
файл | Осветить \ FileSystem \ Filesystem | файлы |
Ворота | Осветить \ Контракты \ Auth \ Access \ Gate | |
гашиш | Осветить \ Контракты \ хеширование \ Hasher | гашиш |
вход | Осветить \ Http \ Запрос | запрос |
Lang | Осветить \ Translation \ Translator | переводчик |
Журнал | Осветить \ Log \ Writer | журнал |
почта | Осветить \ почта \ Mailer | рассылка |
пароль | Осветить \ Auth \ Пароли \ PasswordBroker | auth.password |
Очередь | Осветить \ Queue \ QueueManager | очередь |
Очередь (Экземпляр) | Осветить \ Queue \ QueueInterface | |
Очередь (Базовый класс) | Осветить \ Queue \ Queue | |
переадресовывать | Осветить \ Routing \ редиректор | переадресовывать |
Redis | Осветить \ Redis \ Database | Redis |
Запрос | Осветить \ Http \ Запрос | запрос |
отклик | Осветить \ Контракты \ Routing \ ResponseFactory | |
маршрут | Осветить \ Routing \ Router | маршрутизатор |
схема | Осветить \ Database \ Схемы \ Blueprint | |
сессия | Осветить \ Session \ SessionManager | сессия |
Сессия (Экземпляр) | Осветить \ Session \ магазин | |
Место хранения | Осветить \ Контракты \ Filesystem \ Factory | файловая система |
URL | Осветить \ Routing \ UrlGenerator | URL |
Validator | Осветить \ Validation \ Factory | валидатор |
Валидатор (Экземпляр) | Осветить \ Validation \ Validator | |
Посмотреть | Осветить \ View \ Factory | Посмотреть |
Просмотр (Экземпляр) | Осветить \ View \ View |
пример
Шаг 1. Создайте поставщика услуг с именем TestFacadesServiceProvider , выполнив следующую команду.
php artisan make:provider TestFacadesServiceProvider
Шаг 2 — После успешного выполнения вы получите следующий вывод —
Шаг 3 — Создайте класс с именем TestFacades.php в App / Test .
Приложение / Тест / TestFacades.php
<?php namespace App\Test; class TestFacades{ public function testingFacades() { echo "Testing the Facades in Laravel."; } } ?>
Шаг 4 — Создайте класс Facade с именем «TestFacades.php» в «App / Test / Facades» .
Приложение / Тест / Фасады / TestFacades.php
<?php namespace app\Test\Facades; use Illuminate\Support\Facades\Facade; class TestFacades extends Facade { protected static function getFacadeAccessor() { return 'test'; } }
Шаг 5 — Создайте класс Facade с именем TestFacadesServiceProviders.php в App / Test / Facades.
App / Провайдеры / TestFacadesServiceProviders.php
<?php namespace App\Providers; use App; use Illuminate\Support\ServiceProvider; class TestFacadesServiceProvider extends ServiceProvider { public function boot() { // } public function register() { App::bind('test',function() { return new \App\Test\TestFacades; }); } }
Шаг 6 — Добавьте поставщика услуг в файл config / app.php, как показано на рисунке ниже.
конфиг / app.php
Шаг 7 — Добавьте псевдоним в файл config / app.php, как показано на рисунке ниже.
конфиг / app.php
Шаг 8 — Добавьте следующие строки в app / Http / rout.php.
приложение / Http / routes.php
Route::get('/facadeex', function() { return TestFacades::testingFacades(); });
Шаг 9 — Посетите следующий URL, чтобы проверить Фасад.
http://localhost:8000/facadeex
Шаг 10 — После посещения URL вы получите следующий вывод —
Laravel — Контракты
Контракты Laravel — это набор интерфейсов с различными функциями и основными услугами, предоставляемыми платформой.
Например, Illuminate \ Contracts \ Queue \ Queue contract использует метод, который необходим для очередей заданий, а Illuminate \ Contracts \ Mail \ Mailer использует метод для отправки электронных писем.
Каждый определенный контракт включает в себя соответствующую реализацию рамок. Все контракты Laravel доступны в репозитории GitHub, как указано ниже —
https://github.com/illuminate/contracts
Этот репозиторий предоставляет множество контрактов, доступных в среде Laravel, которые можно загрузить и использовать соответствующим образом.
Важные моменты
При работе с контрактами Laravel обратите внимание на следующие важные моменты:
-
Обязательно определять фасады в конструкторе класса.
-
Контракты явно определены в классах, и вам не нужно определять контракты в конструкторах.
Обязательно определять фасады в конструкторе класса.
Контракты явно определены в классах, и вам не нужно определять контракты в конструкторах.
пример
Рассмотрим контракт, используемый для авторизации в Laravel, который указан ниже —
<?php namespace Illuminate\Contracts\Auth\Access; interface Authorizable{ /** * Determine if the entity has a given ability. * * @param string $ability * @param array|mixed $arguments * @return bool */ public function can($ability, $arguments = []); }
Контракт использует функцию can, которая включает в себя параметр с именем Способность и аргументы, которые используют идентификацию пользователя в форме массива .
Вы должны будете определить контракт, как показано в синтаксисе ниже —
interface <contract-name>
Контракты используются как фасады для создания надежных, хорошо протестированных приложений Laravel. Существуют различные практические различия с использованием договоров и фасадов.
Следующий код показывает использование контракта для кэширования хранилища:
<?php namespace App\Orders; use Illuminate\Contracts\Cache\Repository as Cache; class Repository{ /** * The cache instance. */ protected $cache; /** * Create a new repository instance. * * @param Cache $cache * @return void */ public function __construct(Cache $cache) { $this->cache = $cache; } }
Контракт не содержит реализации и новых зависимостей; Легко написать альтернативную реализацию указанного контракта, таким образом, пользователь может заменить реализацию кеша без изменения какой-либо базы кода.
Laravel — CSRF Защита
CSRF относится к атакам подделки сайтов на веб-приложения. CSRF-атаки — это неавторизованные действия, которые выполняют аутентифицированные пользователи системы. Таким образом, многие веб-приложения подвержены этим атакам.
Laravel предлагает защиту от CSRF следующим образом —
Laravel включает встроенный плагин CSRF, который генерирует токены для каждого активного сеанса пользователя. Эти токены проверяют, что операции или запросы отправлены соответствующим аутентифицированным пользователем.
Реализация
Реализация защиты от CSRF в Laravel подробно обсуждается в этом разделе. Следующие пункты примечательны, прежде чем продолжить защиту CSRF —
-
CSRF реализован в HTML-формах, объявленных внутри веб-приложений. Вы должны включить скрытый проверенный токен CSRF в форму, чтобы промежуточное программное обеспечение защиты от CSRF в Laravel могло проверить запрос. Синтаксис показан ниже —
CSRF реализован в HTML-формах, объявленных внутри веб-приложений. Вы должны включить скрытый проверенный токен CSRF в форму, чтобы промежуточное программное обеспечение защиты от CSRF в Laravel могло проверить запрос. Синтаксис показан ниже —
<form method = "POST" action="/profile"> {{ csrf_field() }} ... </form>
-
Вы можете удобно создавать приложения, управляемые JavaScript, используя HTTP-библиотеку JavaScript, так как она включает в себя токен CSRF для каждого исходящего запроса.
-
Файл, а именно resources / assets / js / bootstrap.js, регистрирует все токены для приложений Laravel и содержит метатег, в котором хранится токен csrf с HTTP-библиотекой Axios .
Вы можете удобно создавать приложения, управляемые JavaScript, используя HTTP-библиотеку JavaScript, так как она включает в себя токен CSRF для каждого исходящего запроса.
Файл, а именно resources / assets / js / bootstrap.js, регистрирует все токены для приложений Laravel и содержит метатег, в котором хранится токен csrf с HTTP-библиотекой Axios .
Форма без токена CSRF
Рассмотрим следующие строки кода. Они показывают форму, которая принимает два параметра в качестве входных данных: электронную почту и сообщение .
<form> <label> Email </label> <input type = "text" name = "email"/> <br/> <label> Message </label> <input type="text" name = "message"/> <input type = ”submit” name = ”submitButton” value = ”submit”> </form>
Результатом вышеприведенного кода является показанная ниже форма, которую конечный пользователь может просмотреть —
Форма, показанная выше, примет любую входную информацию от авторизованного пользователя. Это может сделать веб-приложение подверженным различным атакам.
Обратите внимание, что кнопка отправки включает функции в разделе контроллера. Функция postContact используется в контроллерах для связанных представлений. Это показано ниже —
public function postContact(Request $request) { return $request-> all(); }
Обратите внимание, что форма не содержит никаких токенов CSRF, поэтому конфиденциальная информация, передаваемая в качестве входных параметров, подвержена различным атакам.
Форма с токеном CSRF
В следующих строках кода показана форма, перепроектированная с использованием токенов CSRF.
<form method = ”post” > {{ csrf_field() }} <label> Email </label> <input type = "text" name = "email"/> <br/> <label> Message </label> <input type = "text" name = "message"/> <input type = ”submit” name = ”submitButton” value = ”submit”> </form>
Полученный результат вернет JSON с токеном, как показано ниже —
{ "token": "ghfleifxDSUYEW9WE67877CXNVFJKL", "name": "TutorialsPoint", "email": "[email protected]" }
Это токен CSRF, созданный при нажатии кнопки отправки.
Laravel — Аутентификация
Аутентификация — это процесс идентификации учетных данных пользователя. В веб-приложениях аутентификация управляется сессиями, которые принимают входные параметры, такие как электронная почта или имя пользователя и пароль, для идентификации пользователя. Если эти параметры совпадают, пользователь считается аутентифицированным.
команда
Laravel использует следующую команду для создания форм и связанные контроллеры для выполнения аутентификации —
php artisan make:auth
Эта команда помогает успешно создавать леса аутентификации, как показано на следующем снимке экрана:
контроллер
Контроллером, который используется для процесса аутентификации, является HomeController .
<?php namespace App\Http\Controllers; use App\Http\Requests; use Illuminate\Http\Request; class HomeController extends Controller{ /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('auth'); } /** * Show the application dashboard. * * @return \Illuminate\Http\Response */ public function index() { return view('home'); } }
В результате сгенерированное приложение скаффолда создает страницу входа и страницу регистрации для выполнения аутентификации. Они как показано ниже —
Авторизоваться
Постановка на учет
Аутентификация пользователей вручную
Laravel использует фасад Auth, который помогает вручную аутентифицировать пользователей. Он включает в себя метод попытки подтвердить свою электронную почту и пароль.
Рассмотрим следующие строки кода для LoginController, который включает в себя все функции для аутентификации —
<?php // Authentication mechanism namespace App\Http\Controllers; use Illuminate\Support\Facades\Auth; class LoginController extends Controller{ /** * Handling authentication request * * @return Response */ public function authenticate() { if (Auth::attempt(['email' => $email, 'password' => $password])) { // Authentication passed... return redirect()->intended('dashboard'); } } }
Laravel — Авторизация
В предыдущей главе мы изучили процесс аутентификации в Laravel. В этой главе описывается процесс авторизации в Laravel.
Разница между аутентификацией и авторизацией
Прежде чем углубляться в изучение процесса авторизации в Laravel, давайте разберемся в разнице между аутентификацией и авторизацией.
При аутентификации система или веб-приложение идентифицируют своих пользователей с помощью предоставленных ими учетных данных. Если он обнаруживает, что учетные данные действительны, они аутентифицированы, или же они не являются.
При авторизации система или веб-приложение проверяют, могут ли аутентифицированные пользователи получить доступ к ресурсам, к которым они пытаются получить доступ, или сделать запрос. Другими словами, он проверяет их права и разрешения на запрошенные ресурсы. Если он обнаруживает, что они могут получить доступ к ресурсам, это означает, что они авторизованы.
Таким образом, аутентификация включает проверку достоверности учетных данных пользователя, а авторизация включает проверку прав и разрешений для ресурсов, которые имеет аутентифицированный пользователь.
Механизм авторизации в Laravel
Laravel предоставляет простой механизм авторизации, который содержит два основных способа: Gates и Policies .
Написание ворот и политики
Ворота используются, чтобы определить, авторизован ли пользователь для выполнения определенного действия. Как правило, они определяются в App / Providers / AuthServiceProvider.php с использованием Gate Gate. Ворота также являются функциями, которые объявлены для выполнения механизма авторизации.
Политики объявляются в массиве и используются внутри классов и методов, которые используют механизм авторизации.
В следующих строках кода объясняется, как использовать Gates и Policies для авторизации пользователя в веб-приложении Laravel. Обратите внимание, что в этом примере функция загрузки используется для авторизации пользователей.
<?php namespace App\Providers; use Illuminate\Contracts\Auth\Access\Gate as GateContract; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider{ /** * The policy mappings for the application. * * @var array */ protected $policies = [ 'App\Model' => 'App\Policies\ModelPolicy', ]; /** * Register any application authentication / authorization services. * * @param \Illuminate\Contracts\Auth\Access\Gate $gate * @return void */ public function boot(GateContract $gate) { $this->registerPolicies($gate); // } }
Laravel — Ремесленная Консоль
Платформа Laravel предоставляет три основных инструмента для взаимодействия через командную строку, а именно: Artisan, Ticker и REPL . В этой главе подробно рассказывается об Artisan.
Введение в Artisan
Artisan — это интерфейс командной строки, часто используемый в Laravel, и он включает в себя набор полезных команд для разработки веб-приложения.
пример
Вот список нескольких команд в Artisan вместе с их соответствующими функциями —
Чтобы начать проект Laravel
php artisan serve
Включить механизм кэширования
php artisan route:cache
Для просмотра списка доступных команд, поддерживаемых Artisan
php artisan list
Для просмотра справки о любой команде и просмотра доступных параметров и аргументов
php artisan help serve
На следующем снимке экрана показан вывод приведенных выше команд —
Написание команд
В дополнение к командам, перечисленным в Artisan, пользователь также может создать собственную команду, которую можно использовать в веб-приложении. Обратите внимание, что команды хранятся в каталоге app / console / commands .
Команда по умолчанию для создания пользовательской команды показана ниже —
php artisan make:console <name-of-command>
После того, как вы введете приведенную выше команду, вы сможете увидеть вывод, как показано на скриншоте, приведенном ниже —
Файл, созданный для DefaultCommand, называется DefaultCommand.php и показан ниже:
<?php namespace App\Console\Commands; use Illuminate\Console\Command; class DefaultCommand extends Command{ /** * The name and signature of the console command. * * @var string */ protected $signature = 'command:name'; /** * The console command description. * * @var string */ protected $description = 'Command description'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { // } }
Этот файл содержит подпись и описание для команды, определенной пользователем. Открытая функция с именем handle выполняет функциональные возможности при выполнении команды. Эти команды зарегистрированы в файле Kernel.php в том же каталоге.
Вы также можете создать расписание задач для определенной пользователем команды, как показано в следующем коде —
<?php namespace App\Console; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; class Kernel extends ConsoleKernel { /** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ // Commands\Inspire::class, Commands\DefaultCommand::class ]; /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { // $schedule->command('inspire') // ->hourly(); } }
Обратите внимание, что расписание задач для данной команды определено в функции с именем schedule , которая включает в себя параметр для планирования задач, который принимает почасовой параметр.
Команды зарегистрированы в массиве команд, который включает путь и имя команд.
Как только команда зарегистрирована, она указана в командах Artisan. Значения, включенные в раздел подписи и описания, будут отображаться при вызове атрибута справки указанной команды.
Давайте посмотрим, как просмотреть атрибуты нашей команды DefaultCommand . Вы должны использовать команду, как показано ниже —
php artisan help DefaultCommand
Laravel — Шифрование
Шифрование — это процесс преобразования простого текста в сообщение с использованием некоторых алгоритмов, так что любой третий пользователь не может прочитать информацию. Это полезно для передачи конфиденциальной информации, поскольку у злоумышленника меньше шансов нацелиться на передаваемую информацию.
Шифрование выполняется с использованием процесса, называемого Криптография . Текст, который должен быть зашифрован, называется простым текстом, а текст или сообщение, полученное после шифрования, называется шифрованным текстом . Процесс преобразования зашифрованного текста в обычный текст называется расшифровкой .
Laravel использует шифратор AES-256 и AES-128 , который использует Open SSL для шифрования. Все значения, включенные в Laravel, подписаны с использованием протокольного кода аутентификации сообщений, поэтому базовое значение не может быть подделано после его шифрования.
конфигурация
Команда, использованная для генерации ключа в Laravel, показана ниже —
php artisan key:generate
Обратите внимание, что эта команда использует генератор безопасных случайных байтов PHP, и вы можете увидеть результат, как показано на скриншоте ниже —
Приведенная выше команда помогает в создании ключа, который можно использовать в веб-приложении. Посмотрите на скриншот, показанный ниже.
Заметка
Значения для шифрования должным образом выровнены в файле config / app.php , который включает в себя два параметра для шифрования, а именно ключ и шифр . Если значение, использующее этот ключ, не выровнено должным образом, все значения, зашифрованные в Laravel, будут небезопасными.
Процесс шифрования
Шифрование значения может быть выполнено с помощью помощника шифрования в контроллерах класса Laravel. Эти значения шифруются с использованием OpenSSL и шифра AES-256. Все зашифрованные значения подписаны кодом аутентификации сообщений (MAC) для проверки любых изменений зашифрованной строки.
Показанный ниже код упоминается в контроллере и используется для хранения секретного или конфиденциального сообщения.
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class DemoController extends Controller{ ** * Store a secret message for the user. * * @param Request $request * @param int $id * @return Response */ public function storeSecret(Request $request, $id) { $user = User::findOrFail($id); $user->fill([ 'secret' => encrypt($request->secret) ])->save(); } }
Процесс дешифрования
Расшифровка значений выполняется с помощью помощника расшифровки . Соблюдайте следующие строки кода —
use Illuminate\Contracts\Encryption\DecryptException; // Exception for decryption thrown in facade try { $decrypted = decrypt($encryptedValue); } catch (DecryptException $e) { // }
Обратите внимание, что если процесс расшифровки не был успешным из-за использования недопустимого MAC-адреса, выдается соответствующее исключение.
Laravel — Хэширование
Хеширование — это процесс преобразования строки символов в более короткое фиксированное значение или ключ, представляющий исходную строку. Laravel использует фасад Hash, который обеспечивает безопасный способ хэширования паролей.
Основное использование
На следующем снимке экрана показано, как создать контроллер с именем passwordController, который используется для хранения и обновления паролей.
Следующие строки кода объясняют функциональность и использование passwordController —
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; use App\Http\Controllers\Controller class passwordController extends Controller{ /** * Updating the password for the user. * * @param Request $request * @return Response */ public function update(Request $request) { // Validate the new password length... $request->user()->fill([ 'password' => Hash::make($request->newPassword) // Hashing passwords ])->save(); } }
Хешированные пароли хранятся с использованием метода make . Этот метод позволяет управлять рабочим фактором алгоритма хеширования bcrypt , который широко используется в Laravel.
Проверка пароля против хэша
Вы должны проверить пароль по хешу, чтобы проверить строку, которая использовалась для преобразования. Для этого вы можете использовать метод проверки . Это показано в приведенном ниже коде —
if (Hash::check('plain-text', $hashedPassword)) { // The passwords match... }
Обратите внимание, что метод check сравнивает простой текст с переменной hashedPassword и, если результат равен true, возвращает значение true.
Laravel — Понимание процесса релиза
У каждого фреймворка веб-приложений есть своя история версий, и она постоянно обновляется и поддерживается. Каждая последняя версия приносит новые функциональные возможности и функции, которые либо изменены, либо устарели, поэтому важно знать, какая версия подойдет для ваших проектов.
Когда дело доходит до Laravel, есть две активные версии, как указано ниже —
- Laravel 4 — выпущен в мае 2013
- Laravel 5.1 — выпущен в феврале 2015
Laravel 5.1 также включает в себя различные выпуски с последней версией Laravel 5.1.5, которая включает в себя все надежные функции для веб-разработки. Дорожная карта Laravel или релиз версии показан на рисунке ниже —
Следующие пункты заслуживают внимания в контексте понимания процесса выпуска Laravel —
-
Старый каталог app / models удален в Laravel 5.1.
-
Все контроллеры, промежуточное программное обеспечение и запросы сгруппированы в каталоге в папке app / Http.
-
Новая папка, а именно каталог провайдеров, заменяется файлами app / start в предыдущих версиях Laravel 4.x.
-
Все языковые файлы и представления перемещаются в каталог ресурсов .
-
Новый маршрут команды ремесленника : кеш используется для регистрации новых маршрутов и включен в выпуск Laravel 5.1 и последующие версии.
-
Laravel поддерживает промежуточное ПО HTTP, а также включает токены CSRF и модель аутентификации.
-
Все модели аутентификации находятся в одном каталоге, а именно resources / views / auth . Он включает в себя регистрацию пользователей, аутентификацию и контроллеры паролей.
Старый каталог app / models удален в Laravel 5.1.
Все контроллеры, промежуточное программное обеспечение и запросы сгруппированы в каталоге в папке app / Http.
Новая папка, а именно каталог провайдеров, заменяется файлами app / start в предыдущих версиях Laravel 4.x.
Все языковые файлы и представления перемещаются в каталог ресурсов .
Новый маршрут команды ремесленника : кеш используется для регистрации новых маршрутов и включен в выпуск Laravel 5.1 и последующие версии.
Laravel поддерживает промежуточное ПО HTTP, а также включает токены CSRF и модель аутентификации.
Все модели аутентификации находятся в одном каталоге, а именно resources / views / auth . Он включает в себя регистрацию пользователей, аутентификацию и контроллеры паролей.
Релизы Laravel
Версия | Релиз | Исправление ошибок до | Исправления безопасности до |
---|---|---|---|
V1 | Июнь 2011 | — | — |
V2 | Сентябрь 2011 | — | — |
v3 | Февраль 2012 | — | — |
v4 | Май 2013 | — | — |
5.0 | 4 февраля 2015 г. | 4 августа 2015 г. | 4 февраля 2016 г. |
5,1 (LTS) | 9 июня 2015 г. | 9 июня 2017 г. | 9 июня 2018 г. |
5,2 | 21 декабря 2015 г. | 21 июня 2016 г. | 21 декабря 2016 г. |
5,3 | 23 августа 2016 г. | 23 февраля 2017 г. | 23 августа 2017 г. |
5,4 | 24 января 2017 г. | 24 июля 2017 | 24 января 2018 г. |
5,5 (LTS) | 30 августа 2017 | 30 августа 2019 г. | 30 августа 2020 г. |
5,6 | 7 февраля 2018 г. | 7 августа 2018 г. | 7 февраля 2019 г. |
5,7 | 4 сентября 2018 г. | 4 февраля 2019 г. | 4 сентября 2019 г. |
Обратите внимание, что выделенная версия отмечает последний выпуск.
Laravel — Гость Гейтс
Функция «Гостевые ворота пользователя» является дополнением к последней версии 5.7, выпущенной в сентябре 2018 года. Эта функция используется для запуска процесса авторизации для определенных пользователей.
В Laravel 5.6 была процедура, при которой он возвращал false для неаутентифицированных пользователей. В Laravel 5.7 мы можем разрешить гостям проходить проверки авторизации, используя особую подсказку типа Nullable в указанном контроллере, как указано ниже —
<?php Gate::define('view-post', function (?User $user) { // Guests });
Объяснение Кодекса
Используя подсказку типа NULL, переменная $ user будет иметь значение NULL, когда гостевой пользователь будет передан в строб. Затем вы можете принять решение об авторизации действия. Если вы разрешите пустые типы и вернете true, то у гостя будет авторизация. Если вы не используете подсказку обнуляемого типа, гости автоматически получат ответ 403 для Laravel 5.7, который показан ниже —
Разница между ошибками 403 и 404 заключается в том, что 404 отображается, когда пользователь пытается получить доступ к неизвестному ресурсу или URL-адресу, и ошибка 403, как указано в снимке выше, отображается, если неавторизованный пользователь заходит на веб-сайт.
Laravel — Artisan Commands
Laravel 5.7 поставляется с новым способом обработки и тестирования новых команд. Он включает в себя новую функцию тестирования команд ремесленников, и демонстрация упомянута ниже —
class ArtisanCommandTest extends TestCase{ public function testBasicTest() { $this->artisan('nova:create', [ 'name' => 'My New Admin panel' ]) ->expectsQuestion('Please enter your API key', 'apiKeySecret') ->expectsOutput('Authenticating...') ->expectsQuestion('Please select a version', 'v1.0') ->expectsOutput('Installing...') ->expectsQuestion('Do you want to compile the assets?', 'yes') ->expectsOutput('Compiling assets...') ->assertExitCode(0); } }
Объяснение кода
Здесь новый класс с именем «ArtisanCommandTest» создается в модуле тестовых случаев. Он включает в себя базовую функцию testBasicTest, которая включает в себя различные функции утверждений.
Команда ремесленника ожидает, что вопрос включает в себя два атрибута. Один с вопросом, а другой с apiKeySecret . Здесь ремесленник проверяет apiKeySecret и проверяет ввод, отправленный пользователем.
Тот же сценарий применяется к вопросу «Пожалуйста, выберите версию», где пользователь должен упомянуть конкретную версию.
Laravel — Настройки пагинации
Laravel включает функцию разбиения на страницы, которая помогает пользователю или разработчику включить функцию разбиения на страницы. Lagvel paginator интегрирован с построителем запросов и Eloquent ORM. Метод paginate автоматически позаботится об установке необходимого предела и заданного смещения. Он принимает только один параметр для разбивки на страницы, то есть количество элементов, отображаемых на одной странице.
Laravel 5.7 включает новый метод разбиения на страницы для настройки количества страниц на каждой стороне пагинатора. Новый метод больше не нуждается в настраиваемом представлении нумерации страниц.
Демонстрация кода пользовательского представления разбивки на страницы приведена ниже —
<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; use App\Http\Controllers\Controller; class UserController extends Controller{ /** * Show all of the users for the application. * * @return Response */ public function index() { $users = DB::table('users')->paginate(15); return view('user.index', ['users' => $users]); } }
Новая настройка пагинации в соответствии со стандартами Laravel упоминается ниже —
<?php User::paginate(10)->onEachSide(5);
Обратите внимание, что onEachSide относится к подразделу каждой записи нумерации страниц с 10 и подразделом 5.
Laravel — Dump Server
Сервер дампа Laravel поставляется с версией Laravel 5.7. Предыдущие версии не включают в себя сервер дампа. Сервер дампа будет зависимостью разработки в файле компоновщика laravel / laravel.
С выпуском версии 5.7 вы получите эту команду, которая включает в себя концепцию «из коробки», которая позволяет пользователю выгружать данные в консоль или файл HTML, а не в браузер. Выполнение команды упоминается ниже —
php artisan dump-server # Or send the output to an HTML file php artisan dump-server --format=html > dump.html
объяснение
Команда запускает сервер в фоновом режиме, который помогает в сборе данных, отправляемых из приложения, который отправляет вывод через консоль. Когда команда не выполняется на переднем плане, ожидается, что функция dump () будет работать по умолчанию.
Laravel — URL действия
Laravel 5.7 представляет новую функцию под названием «URL вызываемого действия». Эта функция похожа на ту, что в Laravel 5.6, которая принимает строку в методе действия. Основное назначение нового синтаксиса, представленного в Laravel 5.7, состоит в том, чтобы напрямую разрешить вам доступ к контроллеру.
Синтаксис, используемый в версии Laravel 5.6, показан ниже —
<?php $url = action('UserController@profile', ['id' => 1]);
Подобное действие, названное в Laravel 5.7, упомянуто ниже —
<?php $url = action([PostsController::class, 'index']);
Одним из преимуществ нового синтаксического формата вызываемого массива является возможность прямой навигации к контроллеру, если разработчик использует текстовый редактор или IDE, поддерживающую навигацию по коду.