Laravel 용 package 만들기

Laravel 용 package 만들기 updated_at: 2024-07-09 16:12

[Laravel 용 package 제작] 1. 패키지 만들기

패키지 구조

- src
  - migrations
  - composer.json

composer.json

{
  "name": "wangta69/laravel_board",
  "description": "패키지 설명",
	"keywords": ["키워드1", "키워드2"],
  "license": "MIT",
  "authors": [
    {
      "name": "제작자명",
      "email": "제작자 이메일"
    }
  ],
  "minimum-stability": "안정화버전",
  "require": {
    "php": ">=7.0.0",
    "kyslik/column-sortable": "^6.0",
  },
  "autoload": {
    "psr-4": {
      "Wangta69\\Bbs\\": "src/"
    }
  },
  "extra": {
    "laravel": {
      "providers": [
        "Wangta69\\Bbs\\BbsServiceProvider"
      ],
      "aliases": {
        "CustomPackage": "Wangta69\\Bbs\\Facades\\BbsFacade"
      }
    }
  }
}

  • autoload

"Wangta69\Bbs\": "src/"

네임스페이스: 기본경로(src)

위처럼 처리되면 자동 로딩시 Wangta69\Bbs 를 스페이스로 하고 이후 src의 모든 파일들을 참조한다.

  • "extra" > "laravel" >"providers"

여기에 정의된 provider를 install 시 읽어 들여 초기화 한다.

ServiceProvider

<?php
namespace Wangta69\Bbs;

use Illuminate\Support\ServiceProvider;

class BbsServiceProvider extends ServiceProvider {


/**
     * Where the route file lives, both inside the package and in the app (if overwritten).
     *
     * @var string
     */
   // public $routeFilePath = '/routes/bbs/base.php';

	/**
	 * Register any application services.
	 *
	 * @return void
	 */
	public function register()
	{
		$this->app->bind('bbs', function($app) {
			return new Bbs;
		});
	}

	/**
     * Bootstrap any application services.
     *
     * @return void
     */
    //public function boot(\Illuminate\Routing\Router $router)
	public function boot()
	{
		if (!$this->app->routesAreCached()) {
			require_once __DIR__ . '/Https/routes/web.php';
			require_once __DIR__ . '/Https/routes/api.php';
		}

		$this->loadMigrationsFrom(__DIR__.'/migrations/'); // migrations 디렉토리에 있는 모든 파일들을 마이그래이션 한다.
		\Artisan::call('migrate'); // midration 파일들로 부터 db create or update


		// set assets
		$this->publishes([
			__DIR__.'/Https/public/assets/' => public_path('assets/pondol/bbs'),
		], 'public');

		// copy config
		$this->publishes([
			__DIR__.'/Https/config/bbs.php' => config_path('bbs.php'),
		], 'public');


		// LOAD THE VIEWS
		// - first the published views (in case they have any changes)
		$this->publishes([
			__DIR__.'/resources/views/bbs' => resource_path('views/bbs'),
		]);
		// - loadViews  : 상기와 다른 점음  resources/views/bbs 에 없을 경우 아래 것에서 처리한다. for user modify
		$this->loadViewsFrom(__DIR__.'/resources/views/bbs', 'bbs');

		$this->publishes([
			__DIR__.'/Https/Controllers/Bbs/' => app_path('Http/Controllers/Bbs'),
		]);
	}
}

평점을 남겨주세요
평점 : 5.0
총 투표수 : 1