Старые материалы по laravel 8_0 2

Работа с 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *