Старые материалы и записи по laravel

Оптимизировать и обновлять нет времени да и не особо актуально. Но для себя на будущее сохраню.

Тестовая разработка
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

памятка laravel

Сначала создается модель, если использутся сторонняя база данных, то миграция не нужна
Потом контроллер, содержащий экшены (ресурсный, инвок, произвольный – это по желанию и в зависимости от задачи)
Если с TDD, то каждый экшн покрывается тестом, название теста соответствует названию контроллера + Test (это все в документации)
Для создания этого добра, проще и правильнее пользоваться командами php artisan
Потом создается роут
Если фронт делается не по api, то создается вью
При необходимости для тестирования создаются seeder-ы, которые наполняют БД начальными (фейковыми) данными

cd рабочий_каталог

программа установки laravel (посмотреть как установить 7ю версию)
composer global require "laravel/installer"

создать новый проект
laravel new projectName

Для соединения с базой данных (далее БД) у Laravel есть конфигурационный файл database.php
\config\database.php


Создаем список ссылок

создадим таблицу миграций:
php artisan migrate:install

сгенерируем систему аутентификации
php artisan make:auth
запустите миграцию
php artisan migrate

вместо генерации аутентификации миграций и моделей
Нужно отредактировать файл composer.json в корне приложения, добавив строчку "laracasts/generators": "2.*" в список "require" в ветке dev.
"laravel/framework": "^8.12",
"laravel/tinker": "^2.5",
"laracasts/generators": "2.*"

команды уже встроены в команды artisan в раздел make

генерируем миграции и модели
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)
в новых версиях laravel миграции создаются $table->bigIncrements('id');
При использовании bigIncrements внешний ключ ожидает bigInteger вместо целого числа.

# И сохраним схемы в БД
php artisan migrate 

добавление некоторых связок между таблицами.
php artisan generate:migration add_foreign_user_id_and_offer_id_to_comments_table
php artisan generate:migration add_foreign_city_id_and_company_id_to_offers_table

прописать добавление индексов внутри самих файлов миграций
public function up()
{
    Schema::table('comments', function(Blueprint $table) {
        $table->index('user_id');
        $table->index('offer_id');
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->foreign('offer_id')->references('id')->on('offers')->onDelete('cascade');
    });
}
...
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');
    });
}

создаём для объектов контроллеры с crud функционалом
php artisan make:controller UserController --resource

пути роутов для 8 laravel в файле \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('/', [\App\Http\Controllers\PageController::class, 'home'])->name('home');

либо использовать синтаксис экшена 
    Route::get('register', [RegisterController::class, 'register']);
    Route::resource('homes', HomeController::class)->names('home.index');

правильное использование роутов
    импорт
    use App\Http\Controllers\UserController;
    роут ресурса
    Route::resource('users', UserController::class);


чтобы приложение заработало необходимо поднять веб среду локально, для этого и нужен xampp c его контроль панелью

просмотр всех роутов
php artisan route:list

круд
https://qna.habr.com/q/544782
https://habr.com/ru/post/496468/
https://vivasart.com/lab/laravel-princip-sozdaniya-crud-s-minimalnym-kollichestvom-koda

индекс экшен - вывод листа
public function index()
{
    $notes = Note::orderBy('id', 'desc')
        ->paginate(10); // Трюк для получения пагинатора
    return view('note.index')->with('nodes', $nodes);
}

вьюшка тут
\resources\views\role
role - свой объект

установим админку

перед началом надо установить npm - для этого ставим node.js

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

ещё одна админка
https://know-online.com/post/laravel-admin

тесты: создаем файл ./tests/unit/SeederTest.php
php artisan make:test SeederTest --unit
добавляем тестирующий метод:
public function testLinksTable()
{
  $this->seeInDatabase('links', ['title' => 'dotdev.co']);
}
запустить phpunit

создать файл, заполняющий базу данных.
php artisan make:seeder LinksTableSeeder

в \database\seeders\DatabaseSeeder.php добавьте следующее в метод run
$this->call(LinksTableSeeder::class);

добавить саму модель
php artisan make:model Link
Отредактируем созданную модель app/Models/Link.php добавив имя таблицы в бд

Откроем карту машрутов ./app/Http/routes.php
переехало в \routes\web.php
отправляем ссылки
Route::get('/', function () {
    $links = \App\Models\Link::all();
    return view('welcome', compact('links'));
});


----------------------------------
создание таблиц для проекта

создание миграции.
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

создание миграции.


php artisan make:migration create_role_table --create=role
php artisan make:migration create_userroles_table --create=userroles
php artisan make:migration create_city_table --create=city
php artisan make:migration create_company_table --create=company
php artisan make:migration create_tag_table --create=tag
php artisan make:migration create_offers_table --create=offers
php artisan make:migration create_comments_table --create=comments
php artisan make:migration create_offertags_table --create=offertags

правим файлы миграций \database\migrations\{{ДатаВремя}}_create_offers_table.php
Schema::create('offers', function (Blueprint $table) {
    $table->id();
    $table->string('title', 100);
    $table->text('description');
    $table->integer('city_id')->unsigned();
    $table->integer('company_id')->unsigned();
    $table->integer('off')->unsigned();
    $table->string('image', 100);
    $table->date('expires', 100);
    $table->timestamps();
});

запустите миграцию
php artisan migrate

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

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