Этот пакет содержит класс PackageServiceProvider, который вы можете использовать в своих пакетах для легкой регистрации файлов конфигурации, миграций и многого другого.
Вот пример того, как это можно использовать.
use Darkeum\DarklyyPackageTools\PackageServiceProvider;
use Darkeum\DarklyyPackageTools\Package;
use MyPackage\ViewComponents\Alert;
use Darkeum\DarklyyPackageTools\Commands\InstallCommand;
class YourPackageServiceProvider extends PackageServiceProvider
{
public function configurePackage(Package $package): void
{
$package
->name('your-package-name')
->hasConfigFile()
->hasViews()
->hasViewComponent('pris', Alert::class)
->hasLivewireComponent('pris-livewire', LivewireComponent::class)
->hasViewComposer('*', MyViewComposer::class)
->sharesDataWithAllViews('downloads', 3)
->hasTranslations()
->hasAssets()
->publishesServiceProvider('MyProviderName')
->hasRoute('web')
->hasMigration('create_package_tables')
->hasCommand(YourCoolPackageCommand::class);
}
}
Под капотом он выполнит необходимую работу по регистрации необходимых вещей и сделает все виды файлов доступными для публикации.
В вашем пакете вы должны расширить ваш провайдер данным классом Darkeum\DarklyyPackageTools\PackageServiceProvider.
use Darkeum\DarklyyPackageTools\PackageServiceProvider;
use Darkeum\DarklyyPackageTools\Package;
class YourPackageServiceProvider extends PackageServiceProvider
{
public function configurePackage(Package $package) : void
{
$package->name('your-package-name');
}
}
Передача имени пакета в name обязательна.
Чтобы зарегистрировать файл конфигурации, вам следует создать файл php с именем вашего пакета в каталоге config вашего пакета. В этом примере он должен быть в <package root>/config/your-package-name.php.
Если имя вашего пакета начинается с darklyy-, мы ожидаем, что ваш файл конфигурации не содержит этого префикса. Поэтому, если имя вашего пакета darklyy-cool-package, файл конфигурации должен называться cool-package.php.
Чтобы зарегистрировать этот файл конфигурации, вызовите hasConfigFile() для $package в методе configurePackage.
$package
->name('your-package-name')
->hasConfigFile();
Метод hasConfigFile также сделает файл конфигурации доступным для публикации. Пользователи вашего пакета смогут опубликовать файл конфигурации с помощью этой команды.
php darksander vendor:publish --tag=your-package-name-config
Если в вашем пакете есть несколько файлов конфигурации, вы можете передать их имена в виде массива в метод hasConfigFile
$package
->name('your-package-name')
->hasConfigFile(['my-config-file', 'another-config-file']);
Все представления, предоставляемые вашим пакетом, должны быть размещены в каталоге <package root>/resources/views.
Вы можете зарегистрировать эти представления с помощью команды hasViews.
$package
->name('your-package-name')
->hasViews();
Это зарегистрирует ваши views в Darklyy.
Если у вас есть view <package root>/resources/views/myView.blade.php, вы можете использовать его так: view('your-package-name::myView').
Конечно, вы также можете использовать подкаталоги для организации своих views.
View, расположенное в <package root>/resources/views/subdirectory/myOtherView.blade.php, можно использовать view('your-package-name::subdirectory.myOtherView').
Вы можете передать пользовательское пространство имен views методу hasViews.
$package
->name('your-package-name')
->hasViews('custom-view-namespace');
Теперь вы можете использовать views пакета следующим образом:
view('custom-view-namespace::myView');
Вызов hasViews также сделает views публикуемыми. Пользователи вашего пакета смогут публиковать представления с помощью этой
команды:
php darksander vendor:publish --tag=your-package-name-views
Внимание:
Если вы используете пользовательское пространство имен views, то вам следует изменить команду публикации следующим образом:
php darksander vendor:publish --tag=custom-view-namespace-views
Вы можете поделиться данными со всеми views, используя метод sharesDataWithAllViews. Это сделает общую переменную доступной для всех views.
$package
->name('your-package-name')
->sharesDataWithAllViews('companyName', 'PRIS');
Все компоненты Blade, предоставляемые вашим пакетом, должны быть размещены в каталоге <package root>/src/Components.
Вы можете зарегистрировать эти компоненты с помощью метода hasViewComponents.
$package
->name('your-package-name')
->hasViewComponents('pris', Alert::class);
Это зарегистрирует ваши компоненты в Darklyy. В случае Alert::class, на него можно ссылаться в представлениях
как <x-pris-alert/>, где pris — это префикс, который вы указали при регистрации.
Вызов hasViewComponents также сделает компоненты доступными для публикации и опубликует
их в app/Views/Components/vendor/<package name>.
Пользователи вашего пакета смогут публиковать компоненты представления с помощью этой команды:
php darksander vendor:publish --tag=your-package-name-components
Вы можете зарегистрировать эти компоненты с помощью метода hasLivewireComponents.
$package
->name('your-package-name')
->hasLivewireComponent('pris-livewire', LivewireComponent::class);
Это зарегистрирует ваши компоненты Livewire в Darklyy. В данном случаее, на него можно ссылаться в представлениях
как <livewire:pris-livewire/>, где pris-livewire — это алиас, который вы указали при регистрации.
Вы можете зарегистрировать любые view composers, которые использует ваш проект, с помощью метода hasViewComposers. Вы также можете зарегистрировать обратный вызов, который получает аргумент $view вместо имени класса.
Чтобы зарегистрировать компоновщика представлений со всеми представлениями, используйте звездочку в качестве имени представления '*'.
$package
->name('your-package-name')
->hasViewComposer('viewName', MyViewComposer::class)
->hasViewComposer('*', function($view) {
$view->with('sharedVariable', 123);
});
Любые переводы, предоставляемые вашим пакетом, должны быть помещены в каталог <package root>/resources/lang/<language-code>.
Вы можете зарегистрировать эти переводы с помощью команды hasTranslations.
$package
->name('your-package-name')
->hasTranslations();
Это зарегистрирует переводы в Darklyy.
Предположим, вы сохранили этот файл перевода в <package root>/resources/lang/ru/translations.php
return [
'translatable' => 'Перевод',
];
Ваш пакет и пользователи смогут получить перевод с помощью:
trans('your-package-name::translations.translatable'); // returns 'Перевод'
Если имя вашего пакета начинается с darklyy-, мы ожидаем, что ваш файл перевода не содержит этого префикса. Поэтому, если имя вашего пакета darklyy-cool-package, файл конфигурации должен называться cool-package.php.
При кодировании со строками перевода в качестве ключей вам следует создать файлы JSON
в <package root>/resources/lang/<language-code>.json.
Например, создав файл <package root>/resources/lang/it.json следующим образом:
{
"Hello!": "Ciao!"
}
...выход...
trans('Hello!');
...будет Ciao!, если приложение использует итальянский язык.
Вызов hasTranslations также сделает переводы публикуемыми. Пользователи вашего пакета смогут публиковать
переводы с помощью этой команды:
php darksander vendor:publish --tag=your-package-name-translations
Любые ресурсы, предоставляемые вашим пакетом, должны быть размещены в каталоге <package root>/resources/dist/.
Вы можете сделать эти ресурсы публикуемыми с помощью метода hasAssets.
$package
->name('your-package-name')
->hasAssets();
Пользователи вашего пакета смогут публиковать ресурсы с помощью этой команды:
php darksander vendor:publish --tag=your-package-name-assets
Это скопирует ресурсы в каталог public/vendor/<your-package-name> в приложении, где установлен ваш пакет.
PackageServiceProvider предполагает, что все миграции размещаются в этом
каталоге: <package root>/database/migrations. Внутри этого каталога вы можете разместить любые миграции.
Чтобы зарегистрировать миграцию, вы должны передать ее имя без расширения в таблицу hasMigration.
Если ваш файл миграции называется create_my_package_tables.php.stub, вы можете зарегистрировать их следующим образом:
$package
->name('your-package-name')
->hasMigration('create_my_package_tables');
Если ваш пакет содержит несколько файлов, вы можете просто вызвать hasMigration несколько раз или использовать hasMigrations.
$package
->name('your-package-name')
->hasMigrations(['my_package_tables', 'some_other_migration']);
Вызов hasMigration также сделает миграции публикуемыми. Пользователи вашего пакета смогут публиковать
миграции с помощью этой команды:
php darksander vendor:publish --tag=your-package-name-migrations
Как и ожидалось, опубликованные файлы миграции будут иметь префикс с текущей датой и временем.
Вы также можете включить регистрацию миграций без необходимости публикации их пользователями вашего пакета:
$package
->name('your-package-name')
->hasMigrations(['my_package_tables', 'some_other_migration'])
->runsMigrations();
Вы можете зарегистрировать любую команду, предоставляемую вашим пакетом, с помощью функции hasCommand.
$package
->name('your-package-name')
->hasCommand(YourCoolPackageCommand::class);
Если ваш пакет предоставляет несколько команд, вы можете либо использовать hasCommand несколько раз, либо передать массив в hasCommands.
$package
->name('your-package-name')
->hasCommands([
YourCoolPackageCommand::class,
YourOtherCoolPackageCommand::class,
]);
PackageServiceProvider предполагает, что все файлы маршрутов размещены в этом каталоге: <package root>/routes. Внутри этого каталога вы можете разместить любые файлы маршрутов.
Чтобы зарегистрировать маршрут, необходимо передать его имя без расширения в метод hasRoute.
Если ваш файл маршрута называется web.php, вы можете зарегистрировать его следующим образом:
$package
->name('your-package-name')
->hasRoute('web');
Если ваш пакет содержит несколько файлов маршрутов, вы можете просто вызвать hasRoute несколько раз или использовать hasRoutes.
$package
->name('your-package-name')
->hasRoutes(['web', 'admin']);
Вы можете добавить любую пользовательскую логику, необходимую вашему пакету при запуске, одним из следующих методов:
registeringPackage: будет вызван в начале register метода PackageServiceProviderpackageRegistered: будет вызван в конце register метода PackageServiceProviderbootingPackage: будет вызван в начале boot метода PackageServiceProviderpackageBooted: будет вызван в конце boot метода PackageServiceProvider