Работа с laravel 8 под ОС windows
<h2>Часть 0 Настройка окружения</h2>
Установите на свой компьютер PHP.
рекомендуется XAMPP, так как это просто, удобно и быстро.
После установки XAMPP скачайте последнюю версию Composer.
Запустите мастер установки Composer.
Установщик автоматически добавит Composer в вашу переменную PATH.
<h2>Часть 1 Установка</h2>
документация https://laravel.com/docs/8.x/
открываем командную строку win+r далее cmd выполнить
эту команду выполнить один раз на машине
composer global require laravel/installer
Инсталляция
laravel new projectName
cd projectName
посмотреть доступные команды artisan
php artisan list
сменить ключ шифрования php artisan key:generate
Для соединения с базой данных (далее БД) у Laravel есть конфигурационный файл database.php
\config\database.php
создать базу данных по названию проекта
создадим таблицу миграций:
php artisan migrate:install
<h2>Часть 2 Авторизация</h2>
Проверить установлен ли node.js командой
node -v
npm -v
если не установлен, это действие выполнить один раз на машине
установить node.js
устанавливаем Laravel Breeze
composer require laravel/breeze --dev
php artisan breeze:install
npm install
npm run dev
Для запуска сервера для проверки:
php artisan serve
<h2>Часть 3 Дополнительные инструменты</h2>
Для ускорения создания миграций и моделей установим их генератор
https://packagist.org/packages/laracasts/generators
его нужно установить до админки
добавим его в ветку dev зависимосетй проекта и затянем
composer require --dev laracasts/generators
Теперь новые команды уже встроены в команды artisan в раздел make
<h2>Часть 4 Админка</h2>
для установки админки понадобится установить git
https://git-scm.com/
Laravel Voyager
установка
composer require tcg/voyager
php artisan voyager:install --with-dummy
--with-dummy - засеять тестовыми данными
email: admin@admin.com
password: password
документация https://voyager-docs.devdojo.com/
данное решение плохо тем что не создаёт миграции модели и контроллеры по классическим маршрутам
код невозможно найти в структуре
недовордпресс поверх ларавеля
попробовать следующие инструменты
визуальные:
Laravel QuickAdmin
Генераторы Laravel админок
Z-Song Laravel admin - на китайском :(
Laravel Sleeping Owl Admin
Laravel CRUD Generator от AppzCoder: генератор CRUD + панель
sharp.code16.fr
https://twill.io/
https://www.getcraftable.com/docs/7.0/overview
composer require brackets/craftable
composer require --dev brackets/admin-generator
# here, make sure .env variables are correctly configured
php artisan craftable:install
npm install && npm run dev
на этом месте запоролось с ошибкой, видимо под 8ю laravel ещё не выпустили
ещё одна админка
https://know-online.com/post/laravel-admin
статьи
https://habr.com/ru/post/496468/
https://laravel-news.com/13-laravel-admin-panel-generators
https://web-programming.com.ua/sozdanie-cms-na-laravel-sozdanie-adminki-i-nastrojka-url-adminki/
https://laravel.ru/forum/viewtopic.php?id=3782
<h2>Часть 5 Общая схема работы с laravel</h2>
Сначала создаётся миграция, если используется сторонняя база данных, то миграция не нужна.
создается модель.
Потом контроллер,
контроллер содержит экшены:
ресурсный, инвок, произвольный - это по желанию и в зависимости от задачи
Если с TDD, то каждый экшн покрывается тестом,
название теста соответствует названию контроллера + Test (это все в документации)
Для создания этого добра, проще и правильнее пользоваться командами php artisan
Потом создается роут
Если фронт делается не по api, то создается вью
Тесты
При необходимости для тестирования создаются seeder-ы,
которые наполняют БД начальными (фейковыми) данными
<h2>Часть 6 Миграции</h2>
Где обитают сущности Laravel Voyager модели и контроллеры - загадка
генерируем миграции и модели (если не устанавливали логин бриз)
php artisan make:migration:schema create_roles_table --schema="role:string:unique" --model=true
php artisan make:migration:pivot users roles
php artisan make:migration:schema create_cities_table --schema="name:string:unique" --model=true
php artisan make:migration:schema create_companies_table --schema="name:string:unique" --model=true
php artisan make:migration:schema create_tags_table --schema="name:string:unique" --model=true
php artisan make:migration:schema create_offers_table --schema="title:string, description:text, city_id:unsignedBigInteger:foreign, company_id:unsignedBigInteger:foreign, off:integer:unsigned, image:string, expires:date" --model=true
php artisan make:migration:schema create_comments_table --schema="body:text, user_id:unsignedBigInteger:foreign, offer_id:unsignedBigInteger:foreign, mark:integer" --model=true
php artisan make:migration:pivot offers tags
(company_id:integer:unsigned:foreign преобразуется к companies)
прописать добавление индексов внутри самих файлов миграций
например ->unsignedBigInteger('user_id')->index();
в новых версиях laravel миграции создаются $table->bigIncrements('id');
При использовании bigIncrements внешний ключ ожидает bigInteger вместо целого числа.
например $table->unsignedBigInteger('offer_id')->index();
иначе поймаем ошибку во время выполнения миграции.
public function up()
{
Schema::create('comments', function (Blueprint $table) {
$table->bigIncrements('id');
$table->text('body');
$table->unsignedBigInteger('user_id')->index();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->unsignedBigInteger('offer_id')->index();
$table->foreign('offer_id')->references('id')->on('offers')->onDelete('cascade');
$table->integer('mark');
$table->timestamps();
});
}
...
public function down()
{
Schema::table('comments', function(Blueprint $table) {
$table->dropForeign('comments_user_id_foreign');
$table->dropForeign('comments_offer_id_foreign');
$table->dropIndex('comments_user_id_index');
$table->dropIndex('comments_offer_id_index');
});
}
# сохраним схемы в БД
php artisan migrate
(этот кусок от страницы со списком ссылок сейчас лишний только для тестов оставил)
создание миграции.
php artisan make:migration create_links_table --create=links
правим файл миграций \database\migrations\{{ДатаВремя}}_create_links_table.php
Schema::create('links', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->string('url')->unique();
$table->text('description');
$table->timestamps();
});
# сохраним схемы в БД
php artisan migrate
<h2>Часть 7 Модели и посев</h2>
Параметр --model=true - в предыдущих командах говорил,
что нужно создать для этой таблицы сразу и модель
Создаём таблицы и модели через админку voyager
Инструменты - база данных - создать новую таблицу
для создания bread нужна модель в \app\Models
которые лучше создавать путём обычных миграций
(этот кусок от страницы со списком ссылок сейчас лишний только для тестов оставил)
создать файл, заполняющий базу данных.
php artisan make:seeder LinksTableSeeder
в \database\seeders\DatabaseSeeder.php добавьте следующее в метод run
$this->call(LinksTableSeeder::class);
добавить саму модель
php artisan make:model Link
Отредактируем созданную модель app/Models/Link.php добавив имя таблицы в бд
работа с моделями https://laravel.demiart.ru/7-things-laravel-model/
<h2>Часть 8 Контроллеры</h2>
создаём для объектов контроллеры с crud функционалом
php artisan make:controller UserController --resource
индекс экшен - вывод листа
public function index()
{
$notes = Note::orderBy('id', 'desc')
->where('status', '=', 'PUBLISHED')
->paginate(10); // Трюк для получения пагинатора
return view('note.index')->with('nodes', $nodes);
}
public function show($id)
{
$data = Post::find($id);
return view('post.view')->with('data', $data);
}
о крудах
https://qna.habr.com/q/544782
https://habr.com/ru/post/496468/
https://vivasart.com/lab/laravel-princip-sozdaniya-crud-s-minimalnym-kollichestvom-koda
<h2>Часть 9 Роуты и middleware</h2>
роут может работать и без контроллера на функции замыкания
пути роутов для laravel 8 в файле \app\Providers\RouteServiceProvider.php
первый способ
раскомменитровать
protected $namespace = 'App\Http\Controllers';
если нет то добавить ->namespace($this->namespace) в
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
либо использовать синтаксис экшена
Route::get('register', [RegisterController::class, 'register']);
Route::resource('homes', HomeController::class)->names('home.index');
правильное использование роутов
импорт в /routes/web.php
use App\Http\Controllers\UserController;
роут ресурса
Route::resource('users', UserController::class);
чтобы приложение заработало необходимо поднять веб среду локально, для этого и нужен xampp c его контроль панелью
просмотр всех роутов
php artisan route:list
(этот кусок от страницы со списком ссылок сейчас лишний только для тестов оставил)
Откроем карту машрутов \routes\web.php
отправляем ссылки напрямую во вью минуя контроллер
Route::get('/', function () {
$links = \App\Models\Link::all();
return view('welcome', compact('links'));
});
<h2>Часть 10 Представления</h2>
вьюшки тут
\resources\views\role
role - свой объект
содержимое вьюшек тут
https://habr.com/ru/post/197454/
<h2>Часть 11 Разграничение прав доступа к ресурсам. policy</h2>
Реализуется через политики доступа (policy).
<h2>Часть 12 Тесты</h2>
тесты: создаем файл ./tests/unit/SeederTest.php
php artisan make:test SeederTest --unit
добавляем тестирующий метод:
public function testLinksTable()
{
$this->seeInDatabase('links', ['title' => 'dotdev.co']);
}
запустить phpunit
лучше php artisan test --stop-on-failure
<h2>Часть 13 Статьи по темам</h2>
xampp http://design-for.net/page/primer-sozdanija-sajta
composer https://www.hostinger.ru/rukovodstva/kak-ustanovit-composer
laravel https://packagist.org/packages/laravel/framework
---------
описание установки https://laravel.com/docs/5.4/installation
laravel установка настройка создание деплой приложения https://habr.com/ru/post/197454/
первый проект
http://laravel-news.ru/blog/tutorials/first-laravel-application-1