Laravel

Часть приложения как отдельный пакет

Как создать часть приложения как отдельный пакет

Создаем директорию
packages/callmind/src

В файле composer.json в раздел "autoload" вносим правку

"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/",
"Callmind\\": "packages/callmind/src"
}
},


Для того, что бы изменения вступили в силу выполняем команду
composer dump-autoload

Теперь файлы в находящиеся в дирктории packages/callmind/src находятся в пространстве Callmind

Далее создадим файл packages/callmind/src/CallmindServiceProvider.php

<?php

namespace Callmind;

use App\Http\Middleware\Authenticate;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider;
use Illuminate\Support\Facades\Route;
use Request;

final class CallmindServiceProvider extends RouteServiceProvider
{
public function boot(): void
{

$this->routes(function (): void {
Route::prefix('callmind/api')
->middleware([
'api',
])
->group(self::routeFile('api'));
});

$this->loadMigrationsFrom(__DIR__ . '/../database/migrations');
}

private static function routeFile(string $name): string
{
return __DIR__ . "/../routes/$name.php";
}
}


Строчка $this->loadMigrationsFrom(__DIR__ . '/../database/migrations'); нужна для того, что бы миграции из  директории packages/callmind/database/migrations выполнялись при команде php artisan migrate

Создадим файл packages/callmind/routes/api.php с роутами api для данного пакета

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

use Illuminate\Support\Facades\Http;

Route::get('/dev', function (Request $request) {
return "callmind dev";
});


Делаем, что бы вьюхи были здесь же

В файле packages/callmind/src/CallmindServiceProvider.php

use Illuminate\Support\Facades\View;

final class CallmindServiceProvider extends RouteServiceProvider
{
public function boot(): void
{
View::addNamespace('callmind', base_path('packages/callmind/resources/views'));


В контроллере

return view('callmind::index',[


Сами вьюхи располагать в директории packages/callmind/resources/views'