티스토리 뷰

반응형

Pakage_test

 

아래 url은 참고 코드이다

https://github.com/giovannipds/laravel-package

$ composer create-project --prefer-dist laravel/laravel
- app/
- bootstrap/
- config/
- database/
- public/
- resources/
- routes/
- storage/
- tests/
- vendor/
- composer.json
...

 

1. 기본 폴더 생성

pakage라는 폴더를 우선 생성한다. 그 내부에 제조사나 만든 사람의 이름(jsotf) 폴더를 만들고, 그 아래 만들 package의 이름(todolist)을 적는다.

# /pakage_test/
$ mkdir packages
$ cd packages\
$ mkdir jsoft
$ cd jsoft\
$ mkdir todolist
$ cd todolist\
$ mkdir src

 

 

# # /pakage_test/packages/jsoft/todolist
$ composer init
=> 전부 엔터 치고 넘어간다. vendor 폴더 생성

# # /pakage_test/packages/jsoft/todolist/vendor/composer.json
{
    "name": "king/todolist",
    "autoload": {
        "psr-4": {
            "King\\Todolist\\": "src/"
        }
    },
    "authors": [
        {
            "name": "hanpy",
            "email": "hanpy@네이버"
        }
    ],
    "require": {}
}

 

 

2. root composer.json 설정

 

만든 페키지가 아닌 기존의 composer.json이 새롭게 만든 package를 볼 수 있게 설정을 변경한다. psr-4부분을 변경한다.

# /pakage_test/composer.json
// before
{
    ...
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        }
    },
    ...
}

// after
{
    ...
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/",
            "Jsoft\\Todolist\\": "packages/jsoft/todolist/src/"
        }
    },
    ...
}
  • "Jsoft\\Todolist": "packages/wisdmlabs/todolist/src/"
  • : 기준으로 왼쪽은 첫글짜가 대문자이고 packages는 포함하지 않는다.

 

 

3. create a Service Provider for Package

 

 

\pakage_test
$ php artisan make:provider TodolistServiceProvider
Provider created successfully.

pakage_test/app/Providers 내부에 TodolistServiceProvider.php가 생성된다.

#  TodolistServiceProvider.php
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class TodolistServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}
  • The ***boot()*** function is used to initialize some routes or add an event listener. The ***register()*** function is used to bind our package to the classes inside the app container.

 

# 위에서 namespace를 아래와 같이 수정해 준다.
### before
namespace App\Providers;

### after
namespace jsoft\todolist;

생성된 파일을 우리의 package로 옮기자.

 

`pakage_test/app/Providers`에서 `pakage_test/packages/jsoft/todolist/src/`로 파일을 이동 하면 된다.

 

3-1. 예시 코드

<?php

namespace Jsoftware\Kakaoapi;

use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;

class KakaoapiServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        //
        Route::middleware('web')
        ->namespace($this->namespace)
        ->group(__DIR__.'/routes.php');
    }
}

 

 

 

4. root config 설정

 

위의 boot() 함수나 register() 함수를 사용하기 전에 `pakage_test/config/app.php` 에 아래와 같이 service procider를 축가해 줘야한다.

'providers' => [
        /*
         * Application Service Providers...
         */
         ...
        App\Providers\RouteServiceProvider::class,
        Jsoft\Todolist\TodolistServiceProvider::class,
    ],

 

 

5. create the migration

\pakage_test
$ php artisan make:migration create_task_table --create=tasks
Created Migration: 2021_12_21_060117_create_task_table

`pakage_test/database/migrations/2021_12_21_060117_create_task_table.php``pakage_test/packages/jsoft/migrations/2021_12_21_060117_create_task_table.php`로 파일을 이동 하면 된다.

 

 

 

5-1. 에러 발생 시

In ProviderRepository.php line 208:

해결책

$ composer dump-autoload

 

바로 해결됨.

 

 

 

 

6. create the model for the table

\pakage_test
$ php artisan make:model Task
Model created successfully.

`pakage_test/app/Models/Task.php``pakage_test/packages/jsoft/todolist/src/Task.php`로 파일을 이동 하면 된다.

namespace를 아래와 같이 수정해 준다.
### before
namespace App\Models;

### after
namespace jsoft\todolist;

 

7. create a controller

\pakage_test
$ php artisan make:controller TaskController
Controller created successfully.

 

 

`pakage_test/app/Http/Controllers/TaskController.php``pakage_test/packages/jsoft/todolist/TaskController.php`로 파일을 이동 하면 된다.

 

 

namespace를 아래와 같이 수정해 준다.
### before
namespace App\Http\Controllers;

### after
namespace jsoft\todolist;

 

 

7-1. 예시 코드

route 와 연결된 코드이다.

<?php

namespace Jsoftware\Kakaoapi;

use Illuminate\Http\Request;
use Jsoftware\Kakaoapi;

class KakaoapiController
{
    //
    public function postMsgAll(Request $request)
    {
        return 'adsfasdf';
    }
}

 


8. create a routes file

 

`pakage_test/packages/jsoft/todolist/src`내부에 `routes.php`를 만들어서 package에 사용할 routes를 정의합니다.

<?php
Route::resource('/task', 'Wisdmlabs\Todolist\TodolistController');

 

8-1. 예시코드

<?php

use Illuminate\Support\Facades\Route;
use Jsoftware\Kakaoapi\KakaoapiController;



Route::prefix('kakao')->group(function () {
    Route::get('/postMsg/all', [KakaoapiController::class, 'postMsgAll']); // 예약진행중, 예약취소, 예약확정 array
    Route::get('/postMsg/allJson', [KakaoapiController::class, 'postMsgAllJson']); // 예약진행중, 예약취소, 예약확정 json
});

 

 

 

 

참고하기 좋은 사이트

> 아래의 사이트들도 참고해 보면 좋을 듯하다.

https://laravel.com/docs/8.x/packages#package-discovery

https://medium.com/cafe24-ph-blog/build-your-own-laravel-package-in-10-minutes-using-composer-867e8ef875dd

https://devdojo.com/devdojo/how-to-create-a-laravel-package

https://zetawiki.com/wiki/Composer_%EB%AA%85%EB%A0%B9%EC%96%B4

반응형

'Web > php' 카테고리의 다른 글

laravel 윈도우에서 쉽게 설치하기  (0) 2022.01.14
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함