Привет. В этом уроке я объясню основную концепцию Laravel. Что это такое и как им пользоваться.
Мы будем создавать очень простое TODO
приложение, приложение, которое позволяет вам создавать, показывать, обновлять, удалять TODO’s
. Я все подробно объясню.
TODO - это в основном список задач, которые вы должны сделать, или вещей, которые вы хотите сделать.
ЧТО ТАКОЕ LARAVEL?
Laravel - это бесплатная среда с открытым исходным кодом, разработанная Тейлором Отвеллом и используемая в основном для веб-приложений.
Раньше для создания полноценного веб-приложения требовалось много работы.
😫. Вам приходилось самостоятельно управлять и создавать такие вещи, как - аутентификация (вход / регистрация), управление сеансом, управление базой данных и т. Д. С Laravel вы можете справиться со всем этим без особого стресса 😆
ТРЕБОВАНИЯ
У вас должно быть базовое понимание PHP (поскольку на нем была создана структура).
Проверьте это, чтобы начать работу с объектно-ориентированным программированием с помощью PHP.
- Https://www.w3schools.com/php/php_oop_what_is.asp
- Https://www.tutorialspoint.com/php/php_object_orient.htm
НАСТРОЙКА LARAVEL
Хорошо, давайте настроим Laravel. Вам понадобятся:
- Composer - приложение для управления зависимостями PHP и необходимых библиотек. Загрузить и установить.
2. Laragon - портативная и быстрая среда разработки для PHP. Загрузить и установить
Возможно, вам придется вручную загрузить и установить последнюю версию PHP или версию ›= 7.2.5. в Ларагоне
NB - Вы также можете использовать XAMPP или WAMP.
Установка Laravel (здесь использовалась версия 6)
- Откройте свой
Laragon
- Нажмите
Start All
- Щелкните правой кнопкой мыши интерфейс ›Щелкните
Quick App
›Laravel
- Введите имя проекта - для этого проекта - входные данные -
todo
- Щелкните
OK
. - Расслабьтесь, пока для вас будет создан новый проект Laravel. (Примечание. Это требует подключения к Интернету и может занять около 3 минут).
Если все заработало -
Ваш новый проект будет расположен в C://laragon/www/todo
- для пользователей Windows.
Чтобы проверить, сработало ли это, - ›Посетите todo.test
в своем браузере.
Вы должны это увидеть
ПОЗДРАВЛЯЕМ! Ваш первый проект Laravel запущен и работает. 😃
Теперь давайте создадим наше простое приложение TODO.
ПРИЛОЖЕНИЕ TODO
В этом приложении вы сможете:
- Создайте свой собственный
Todo
(введя имя вашегоTodo
и описание) - Покажите список созданных вами
Todos
- Отредактируйте
Todo
- измените значение (имя или описание, либо и то, и другое) - Удалить
Todo
- удалитьTodo
из базы данных
Теперь откройте ваш любимый редактор кода - PhpStorm, VScode и т. Д. Я порекомендую PhpStorm
- это, возможно, лучший вариант для проектов PHP. Вы можете использовать кого угодно.
НАСТРОЙКА БАЗЫ ДАННЫХ
Большинству приложений требуется база данных. Мы будем использовать это для хранения записей нашего Todos
.
- Откройте
localhost/phpmyadmin/
. Войдите, используяroot
в качестве имени пользователя и пустой пароль (оставьте поле пустым) -“ ”
- После открытия нажмите
New
, введите имя базы данных какtodos_app
и нажмитеCreate
- Откройте свой проект и перейдите к файлу
.env
. Установленный -
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=todos_app DB_USERNAME=root DB_PASSWORD=
Хорошо, наша база данных готова, а как насчет таблиц ?.
Вы можете создавать таблицы через графический интерфейс, предоставляемый PhpMyAdmin. Да! но мы не собираемся этого делать. Для этого мы воспользуемся интерфейсом командной строки Laravel. ПОЧЕМУ? Потому что это упрощает и улучшает управление базами данных при совместной работе.
В Laravel вся эта концепция управления базами данных известна как Migrations
.
Подробнее -
Итак, как нам создать нашу таблицу с помощью миграций:
Перейдите к своему терминалу и выполните следующую команду -
php artisan make:migration create_todos_table
Файл миграции будет создан в
database/migrations
каталоге .
Он будет выглядеть так -2020_10_12_create_todos_table.php
Хорошо, откройте файл миграции, и вы увидите что-то вроде этого
Функция Up - вызывается при каждом запуске
migrate
(используется для добавления новых таблиц, столбцов или индексов в вашу базу данных)
Функция down - вызывается всякий раз, когда вы запускаетеrollback
(отмените операции, выполняемыеup
методом.)
Хорошо, у нас есть таблица с некоторыми столбцами по умолчанию (id, timestamps
[created_at, updated_at]), автоматически сгенерированными Laravel. Давайте добавим в нашу таблицу еще несколько полей / столбцов - (name, description
).
Чтобы добавить другой столбец, откройте только что созданный файл миграции и добавьте следующий код. Теперь ваш файл должен выглядеть так.
Хорошо, наша база данных теперь выглядит отлично. Теперь отметьте localhost/phpmyadmin,
, вы должны увидеть свою таблицу и столбцы ..? ВЫ? NOPPE !!
Это потому, что созданная вами миграция просто сидит в вашем проекте Laravel, вы не сказали Laravel, что делать с миграциями.
Здесь команда migrate
становится на место.
Чтобы файлы миграции, которые вы создали, повлияли на вашу базу данных, вы должны запустить
php artisan migrate
Сделайте это и проверьте свою базу данных, вы увидите созданные вами таблицы и столбцы.
МОДЕЛЬ - ›ПРОСМОТР -› КОНТРОЛЛЕР (MVC)
Модель - Представление - Контроллер (MVC) - это архитектурный шаблон, используемый Laravel, который разделяет приложение на три основных логические компоненты: модель, представление и контроллер.
Каждый из этих компонентов создан для обработки определенных аспектов разработки приложения.
Разъяснил
Используя fig1.
- Когда пользователь отправляет запрос в браузер, Laravel проверяет
routes
file, чтобы увидетьurl
, который соответствует введенному пользователем, например, пользователь посещаетgoogle.com/home
. Laravel проверяет папкуroutes
(в основномweb.php
илиapi.php
в зависимости от того, что вы строите) - Если
url
совпадает с любым, содержащимся вroutes
, Laravel затем проверяет Контроллер, объявленный для этого маршрута (если он есть), и сообщает браузеру, что делать или отображать. - Например, мы посетили
google.com/home
, мы хотим, чтобы в браузере отображался логотип Google и поле поиска. В нашем контроллере мы объявим метод для возврата представления, содержащего логотип и поле поиска. Все представления в Laravel помещаются в каталогresources/views
. - Итак, мы показали логотип Google и поле поиска. Большой! Что, если бы мы хотели показать динамические элементы, полученные из базы данных? Например, мы хотели показать список фотографий, загруженных всеми пользователями веб-сайта. В этом случае нам нужно будет связаться с нашей базой данных и написать несколько кодов в нашем
controller
, имея в виду нашdatabase
. Здесь появляется Модель.
МОДЕЛЬ
В Laravel каждая созданная база данных table
должна иметь соответствующую модель, которая используется для взаимодействия с этой таблицей.
Для нашей таблицы - todos
мы собираемся создать модель Todo
. Эта модель будет использоваться для взаимодействия с нашей todos
таблицей.
Выполните следующую команду
php artisan make:model Todo
- Модель будет создана в каталоге
app/Models
.
Узнайте больше о моделях Eloquent здесь
Узнайте больше, поскольку при создании моделей существует соглашение об именах.
По соглашению, имя класса во множественном числе «змеиный случай» будет использоваться в качестве имени таблицы, если другое имя не указано явно. Таким образом, в этом случае Eloquent будет предполагать, что модель Todo хранит записи в таблице задач, а модель
AirTrafficController
будет хранить записи в таблицеair_traffic_controllers
.
ПРОСМОТРЫ
Хорошо, давайте создадим наши представления для нашего приложения Todos
.
Для этого мы будем писать наш интерфейсный код, используя HTML и CSS (Bootstrap).
- Перейдите к
resources/views/layouts
(если вы не можете найти макеты, создайте новый каталог с именемlayouts
) - Создайте новый файл с именем
app.blade.php
- здесь будут записаны все связанные общие коды html, необходимые для всех файлов, чтобы избежать ненужного кода шаблона. - Напишите там следующий код
Laravel использует движок шаблонов Blade.
Подробнее
Для каждого HTML-кода, который мы собираемся писать, для которого требуется этот набор кодов, мы будем расширять этот app.blade.php
.
ПОКАЗАТЬ ВСЕ ПРОСМОТРЫ ТОДОВ
Это будет наш первый просмотр, когда вы посетите главную страницу веб-сайта. По сути, это список всех созданных вами ltodos
.
- Перейдите на
resources/views
- Удалите файл
welcome.blade.php
. Нам это больше не нужно - Щелкните правой кнопкой мыши
views
- ›Создайте новый файл PHP, назовите егоindex.blade.php
- После создания напишите следующий код
Он должен выглядеть так (не волнуйтесь, вы пока не можете получить к нему доступ в своем браузере!)
Я заполнил todos
фиктивными данными, они будут заменены именем todo
, которое вы скоро создадите.
СОЗДАТЬ ПРОСМОТР
Это представление будет обрабатывать создание todos
. В основном это будет форма и кнопка отправки.
- Перейдите на
resources/views
- Щелкните правой кнопкой мыши
views
- ›Создайте новый файл PHP, назовите егоcreate.blade.php
- После создания напишите следующий код
У вас получится что-то вроде этого. (Опять же, вы еще не можете просмотреть это в своем браузере)
ПРОСМОТР TODOS DETAILS
В этом представлении при нажатии отображается подробная информация о todo
.
- Создайте новый файл php в
resources/views
- Назовите файл
details.blade.php
- Напишите там следующий код
Это должно выглядеть так
ИЗМЕНИТЬ / ОБНОВИТЬ ТОДОВЫЙ ПРОСМОТР
Представление, которое позволяет вам вносить изменения в todo
- это в основном то же представление, что и при создании todo
, но с заполнением формы уже созданными полями имени и описания.
- Создайте новый файл в папке
resources/views
- ›Назовите этот файлedit.blade.php
- Напишите следующий код
Вы получите что-то вроде этого
Хорошо. Мы закончили со всеми видами, необходимыми для этого приложения,
ПРОСМОТРЫ - ›✔️
КОНТРОЛЛЕРЫ
Прежде чем говорить о контроллерах, зайдите на routes/web.php
Что это за файл? - ›Это файл, определяющий маршруты для вашего веб-интерфейса. Имеет ли это смысл? 😶
Хорошо, рассматривайте это как место, где обрабатывается вся логика, лежащая в основе всех "urls
", доступных на вашем веб-сайте.
Например - В нашем приложении - Если кто-то посетил todo.test
(Что должно произойти? Какой вид должен отображаться? Какая логика должна выполняться?)
Все эти вопросы рассматриваются в файле routes/web.php
.
Из fig a
выше, этот код просто означает следующее - ›
- Когда пользователь делает
get
запрос через браузер, посещая корневой каталог/
(в нашем случаеtodo.test
) - Выполнить функцию - эта функция возвращает представление
welcome.blade.php
, которое в основном будет находиться в каталогеresources/views
.
Если вы войдете в браузер и запустите todo.test
- ›Вы должны получить сообщение об ошибке - потому что мы ранее удалили файл welcome.blade.php
.
Теперь мы хотим показать список todos
на нашей домашней странице.
- Отредактируйте
routes/web.php
файл - В блоке объявления функции измените
welcome
наindex
- Зайдите в свой браузер, вы должны увидеть фиктивные
todo
списки, которые мы создали ранее.
Это нормально. А теперь представьте, что у вас есть сложная логика, которая должна быть реализована, когда пользователь посещает эту страницу, многократное написание функции может сделать файл routes
беспорядочным. Здесь появляется контроллер.
Контроллер позволяет сегментировать логику файла маршрутов в один класс.
Например, класс UserController
может обрабатывать все входящие запросы, относящиеся к пользователям, включая отображение, создание, обновление и удаление пользователей.
СОЗДАТЬ КОНТРОЛЛЕР
Этот контроллер обрабатывает логику нашего приложения todos
- Запустите команду
php artisan make:controller TodoController
- Контроллер будет создан под
app/Http/Controllers
- Теперь откройте файл
routes/web.php
- Измените код на этот
Route::get('/', [TodoController::class, 'index']);
Термин «индекс» - это метод, который мы создадим в классе
TodoController
, который поможет нам отобразить списокtodos
НАПИСАНИЕ ЛОГИКИ
- Откройте
TodoController
, который вы только что создали - Напишите функцию, которая будет обрабатывать отображение списка всех
todos
, которые вы создали
public function index(){ return view('index'); }
- Зайдите в браузер и загрузите
todo.test
- Вы все равно должны увидеть список созданных пустышек
todos
Отлично, теперь наш код выглядит чище
Проделав то же самое с другими нашими представлениями, наш окончательный код будет выглядеть так:
routes / web.php
Route::get('/', [TodoController::class, 'index']); Route::get('create', [TodoController::class, 'create']); Route::get('details', [TodoController::class, 'details']); Route::get('edit', [TodoController::class, 'edit']); Route::post('update', [TodoController::class, 'update']); Route::get('delete', [TodoController::class, 'delete']);
TodoController.php
public function index(){ return view('index'); } public function create(){ return view('todos.create'); } public function details(){ return view('details'); } public function edit(){ return view('edit'); } public function update(){ //we will write codes for updating a todo here } public function delete(){ //we will write codes for deleting a todo here }
Зайдите в свой браузер, все представления должны отображаться правильно.
Хорошо ... Но мы еще не взаимодействуем с нашей базой данных, все элементы были созданы нами вручную в нашем html
ВЗАИМОДЕЙСТВИЕ С НАШЕЙ МОДЕЛЬЮ
Как было сказано ранее, модель используется для взаимодействия с таблицей базы данных. У нас уже есть наша таблица (todos
) и модель (Todo
). Наша модель должна взаимодействовать с методами в нашем контроллере для выполнения основных CRUD
операций.
ОТОБРАЖЕНИЕ СПИСКА ЗАДАЧ
На данный момент мы не создали ни одной задачи, поэтому записи в нашей базе данных практически пусты. Если вы посмотрите на нашу домашнюю страницу todo.test
, она показывает список фиктивных данных, которые мы вручную добавили в наш index.blade.php
файл. Теперь мы изменим это и получим данные из нашей todos
таблицы.
- Открыть
TodoController.php
- Перейти к функции
index()
- В блоке объявления добавьте этот код
public function index(){ $todo = Todo::all(); return view('index')->with('todos', $todo); }
Этот код делает следующее: ›Получает все данные в todos
таблице. (Помните, что мы взаимодействуем с нашей таблицей через нашу модель - Todo
) - ›Передайте их нашему представлению (index.blade.php
)
- Открыть
index.blade.php
- Измените код на эти
- Теперь откройте браузер и загрузите
todo.test.
Страница будет пустой. Это ожидается, поскольку мы еще не создали ни одногоtodo
.
СОЗДАНИЕ ЗАДАЧИ
Теперь давайте создадим todos
- Перейдите на
create.blade.php
- Добавьте
action
в тег формы иcsfr
(для обработки атаки с подделкой межсайтовых запросов).
Теперь должно выглядеть так:
- Добавьте маршрут для
store-data
и метод в нашTodoController
для обработки созданияtodos
- назовите егоstore
Route::post('store-data', [TodoController::class, 'store']);
Обратите внимание, что это
post
запрос, потому что мы отправляем данные на сервер.
- Откройте
TodoController
и добавьте методstore()
Вот что мы сделали. - › Проверяем данные, отмечая поля как обязательные, получаем все запросы / данные, поступающие в -› Сохраняем данные в объекте - › Сохранить их в базе данных -› Показать сообщение об успешном завершении - › Вернуться на главную
Теперь, чтобы показать сообщение об успехе, вам нужно отредактировать файл app.blade.php
и добавить эту строку в container
div
@if(session()->has('success')) <div class="alert alert-success"> {{ session()->get('success') }} </div> @endif
- Идите вперед и создайте
Todo
, он должен работать как положено.
ПОКАЗАТЬ ДЕТАЛИ
Здесь мы должны отображать детали конкретного todo
при нажатии.
Как мы это делаем? Простой - › Получите id
того todo
, который вы хотите просмотреть -› Используя этот id
, получите запись для этого конкретного todo
(имя, описание)
- Go to
index.blade.php
- Измените ссылку
url
для просмотра деталей на что-то вроде этого
- Открыть
routes/web.php
- Измените
details
маршрут на этот
Route::get('details/{todo}', [TodoController::class, 'details']);
- Откройте
TodoController
, измените метод на этот
public function details(Todo $todo){ return view('details')->with('todos', $todo); }
- Откройте
details.blade.php
и измените его на это
- Протестируйте в своем браузере, и вы должны увидеть подробную информацию о каждом
todo
, созданном вами.
ОБНОВЛЕНИЕ ЗАДАЧИ
Итак, вы создали todo
, хорошо! что, если вы допустили ошибку и захотите изменить, возможно, имя или описание - вы могли бы сделать это через phpMyAdmin, но СЕРЬЕЗНО? Мы должны иметь возможность изменить это на нашем веб-сайте.
- Открыть
routes/web.php
- Измените маршрут редактирования задачи на это
Route::get('edit/{todo}', [TodoController::class, 'edit']);
- Зайдите в свой
edit.blade.php
и поменяйте его на этот
- Измените маршрут для "
update
" на этот
Route::post('update/{todo}', [TodoController::class, 'update']);
- Теперь откройте
TodoController
, добавьте их в методupdate()
.
- Попробуйте отредактировать
todo
, и он должен работать
УДАЛИТЬ ЗАДАЧУ
Теперь нам нужно удалить todo
из таблицы базы данных.
- Открыть
routes/web.php
- Измените маршрут
delete
на этот
Route::get('delete/{todo}', [TodoController::class, 'delete']);
- Откройте
details.blade.php
, измените удалениеurl
на это:
<a href="/delete/{{$todos->id}}"><span class="btn btn-danger">Delete</span></a>
- Откройте
TodoController
и добавьте это в методdelete()
- Удалите
todo
, и он должен работать.
НАКОНЕЦ! Мы подошли к концу - к концу этой нескончаемой войны, теперь выйдите на улицу и получите немного витамина D.
Надеюсь, вы узнали, как использовать Laravel для выполнения базовых операций CRUD, которые по сути являются строительными блоками всех веб-сайтов.!
Спасибо!