합쭈기 programming

[Laravel] 퍼블리싱 패키지? 시크릿 패키지? 본문

Dev story

[Laravel] 퍼블리싱 패키지? 시크릿 패키지?

innocent_k 2015. 7. 9. 11:48
퍼블리싱 패키지를 composer로 추가하는 것은 
이곳에 나와 있다. 한국어 버전 composer document 이다. 

퍼블리싱 패키지를 추가하는 것은 문제가 아닌데 
문제는 사내에서 관리되는 모듈을 오픈시킬수는 없는 노릇! 
그럼 공개되지 않는 패키지는 어떻게 composer로 autoload 할 것인가가 관건이었다. 

해보니 생각보다 간단했다. 

먼저 추가할 패키지를 만들었다. 






패키지를 es로 하고 controller.php는 app > http > conrollers에서 copy 했다.

view도 resource > views에서 copy 

route를 위한 provider를 app > providers에서 copy 후 수정한다. 


SkyRouteServiceProvider.php

<?php


namespace Es\Providers;


use Illuminate\Routing\Router;

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


class SkyRouteServiceProvider extends ServiceProvider

{

    /**

     * This namespace is applied to the controller routes in your routes file.

     *

     * In addition, it is set as the URL generator's root namespace.

     *

     * @var string

     */

    protected $namespace = 'Es\Controllers';


    /**

     * Define your route model bindings, pattern filters, etc.

     *

     * @param  \Illuminate\Routing\Router  $router

     * @return void

     */

    public function boot(Router $router)

    {

        //


        parent::boot($router);

    }


    /**

     * Define the routes for the application.

     *

     * @param  \Illuminate\Routing\Router  $router

     * @return void

     */

    public function map(Router $router)

    {

        $router->group(['namespace' => $this->namespace], function ($router) {

            require realpath(base_path('es/routes.php'));

        });

    }

}


네임스페이스는 Es\ 로 하여 작업하고

config > app.php에서 수정한 provider를 추가한다.


'providers' => [


      ... ...

      Es\Providers\SkyRouteServiceProvider::class,

    ],


config > view.php에 view path를 추가한다. 


'paths' => [

        realpath(base_path('resources/views')),        

        realpath(base_path('es/views')),  

    ],


마지막으로 composer.json에 네임스페이스와 path를 추가했다.

 "autoload": { 
       "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/",
            "Es\\" : "es/"
        }
    },


여기까지하면 Es\ 안에 route provider를 찾을 수 없다고 나온다.

composer를 통해 autoload를 재생성해 주니 제대로 표출! 

명령어는 composer dump-autoload