• Время чтения ~4 мин
  • 25.08.2022

В этом посте показано, как настраивать заглушки, используемые для создания различных классов в вашем приложении. Несмотря на незначительное неудобство, ручная настройка каждого сгенерированного класса может быть утомительной, и Laravel предоставляет разработчикам возможность публиковать и версионировать заглушки в приложении, если вы хотите, чтобы сгенерированные классы соответствовали вашему конкретному вкусу.

Если вы хотите продолжить, вы можете создать новый проект Laravel с помощью установщика Laravel. , с помощью Sail или любым другим удобным способом для создания нового приложения:

laravel new stub-demo --git

Возможно, вы заметили, что Установщик Laravel теперь поддерживает интеграцию Git и GitHubпредполагая, что у вас есть минимальная требуемая версия git, у вас должен быть новый репозиторий и первая фиксация.

Управление версиями нашего демо-проекта — отличный способ визуализировать заглушки изменений, которые мы сделайте по пути и посмотрите, какие файлы Laravel публикует в приложении.

Публикация заготовок

Первым шагом в настройке заглушек может быть добавление заглушек, которые вы хотите настроить индивидуально, в папку /stubs в корне проекта Laravel, или вы можете опубликовать их все с помощью Artisan:</ p>

$ php artisan stub:publish
$ git add stubs
$ git status
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
 
	new file:   stubs/cast.stub
	new file:   stubs/console.stub
	new file:   stubs/controller.api.stub
	new file:   stubs/controller.invokable.stub
	new file:   stubs/controller.model.api.stub
	new file:   stubs/controller.model.stub
	new file:   stubs/controller.nested.api.stub
	new file:   stubs/controller.nested.stub
	new file:   stubs/controller.plain.stub
	new file:   stubs/controller.stub
	new file:   stubs/factory.stub
	new file:   stubs/job.queued.stub
	new file:   stubs/job.stub
	new file:   stubs/middleware.stub
	new file:   stubs/migration.create.stub
	new file:   stubs/migration.stub
	new file:   stubs/migration.update.stub
	new file:   stubs/model.pivot.stub
	new file:   stubs/model.stub
	new file:   stubs/observer.plain.stub
	new file:   stubs/observer.stub
	new file:   stubs/policy.plain.stub
	new file:   stubs/policy.stub
	new file:   stubs/request.stub
	new file:   stubs/resource-collection.stub
	new file:   stubs/resource.stub
	new file:   stubs/rule.stub
	new file:   stubs/seeder.stub
	new file:   stubs/test.stub
	new file:   stubs/test.unit.stub

Как видите, у нас довольно много заготовок, опубликованных в папке app!Я оставлю это на ваше усмотрение, хотите ли вы создать версию всех из них, но вы можете либо сохранить их копию, либо сохранить только определенные заглушки, которые хотите настроить.

Заглушки пользовательских контроллеров

Laravel 8.36; представил идею --typeфлаг при создании контроллера, позволяющий писать пользовательские файлы-заглушки для создания контроллера:

<?php
// stubs/controller.custom.stub
namespace {{ namespace }};
 
use {{ rootNamespace }}Http\Controllers\Controller;
use Illuminate\Http\Request;
 
/**
 * Hello from the custom controller stub
 */
class {{ class }}
{
    //
}

После добавления пользовательского класса-заглушки вы можете создать контроллер, используя этот шаблон:

php artisan make:controller --type=custom MyController

Что сгенерирует следующий файл контроллера:

<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Http\Request;
 
/**
 * Hello from the custom controller stub
 */
class MyController
{
    //
}

Хотя этот уровень гибкости хорош, я считаю, что большинство разработчики могут вписываться в рамки заглушек, предоставляемых фреймворком.Использование нового флага --type — это ручной способ выбора шаблона контроллера, который вы хотите сгенерировать:

php artisan make:controller --type=plain PlainController

который будет генерировать файл на основе в файле stubs/controller.plain.stub, опубликованном Laravel:

<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Http\Request;
 
class PlainController extends Controller
{
    //
}

Разумный подход

Предположим, вы хотите добавить комментарий об авторских правах к каждому файлу, созданному в вашем приложении Laravel.В этом случае вы можете рассмотреть возможность создания версий всех доступных заглушек и при обновлении запустить команду stub:publish, чтобы получить новые добавленные заглушки.

< p>Однако для типичных случаев использования, возможно, вы можете создавать версии только тех заглушек, которые вам нужно настроить. Например, предположим, что вы не хотите, чтобы какие-либо контроллеры расширяли базовый класс Controller; вы можете верифицировать все controller.* заглушки с вашими настройками, но удалите все остальные заглушки.

Что, если заглушки изменятся выше по течению?

Допустим, вы версионируете все заглушки из stub:publish, но вы обеспокоены тем, что по мере того, как платформа Laravel получает обновления основных файлов заглушек, ваше приложение будет устаревшим.Если вы версионируете все заглушки, вы всегда можете принудительно обновить их, чтобы получить последние версии.

Возьмем, к примеру, давайте изменим заглушку и зафиксируем ее в Git:< /p>

Вы обновили тестовую заглушку и зафиксировали обновление в Git. Допустим, позже Laravel публикует некоторые обновления заготовок, и вы хотите проверить, не изменились ли они:

У вас есть простой способ увидеть, как ваши заглушки со временем расходятся с кодовой базой Laravel! Поскольку заглушки имеют версии, вы можете просто отменить изменения, вызванные флагом --force, если вам нужно объединить ваши изменения с последними изменениями заглушки.

echo "/* test */" >> stubs/test.stub
git commit -am"Testing stub update"
$ php artisan stub:publish --force
$ git diff
diff --git a/stubs/test.stub b/stubs/test.stub
index 834a53d..84c75cb 100644
--- a/stubs/test.stub
+++ b/stubs/test.stub
@@ -20,4 +20,3 @@ class {{ class }} extends TestCase
         $response->assertStatus(200);
     }
 }
-/* test */

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Об авторе CrazyBoy49z
WORK EXPERIENCE
Контакты
Ukraine, Lutsk
+380979856297