티스토리 뷰
Pakage_test
아래 url은 참고 코드이다
$ 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://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
- useState
- vuejs
- TensorFlow
- DFS
- react
- JavaScript
- 클라우데라
- django
- error:0308010C:digital envelope routines::unsupported
- typescript
- 자료구조
- logout
- Queue
- Express
- nextjs autoFocus
- next.config.js
- read_csv
- mongoDB
- Vue
- Python
- react autoFocus
- useHistory 안됨
- nodejs
- UserCreationForm
- NextJS
- 자연어처리
- BFS
- login
- pandas
- Deque
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |