컨트롤러 추가

구현규칙

  • 아래 내용은 NHN커머스 내부 개발자에 의해서만 구현 가능합니다.
  • 새로 추가시킬 Controlleruri는 관리상의 이유로 2depth 이상을 권장합니다.
  • 컨트롤러 추가시 반드시 html 템플릿과 같이 생성시켜주셔야 합니다.
  • 추가예제
    • Request 요청
      • 프론트 : http://example.com/sample/login.php
      • 관리자 : http://gdadmin.example.com/sample/login.php
      • 모바일 : http://m.example.com/sample/login.php
    • 컨트롤러 경로
      • 프론트 : /system/src/Bundle/Controller/Front/Sample/LoginController.php
      • 관리자 : /system/src/Bundle/Controller/Admin/Sample/LoginController.php
      • 모바일 : /system/src/Bundle/Controller/Mobile/Sample/LoginController.php
    • 스킨 경로
      • 프론트 : /user/data/skin/front/[스킨명]/sample/login.html
      • 관리자 : /user/admin/sample/login.php
      • 모바일 : /user/data/skin/mobile/[스킨명]/sample/login.html
  • 스킨이 없는 경우 Can not find defined template 오류가 발생합니다.

System의 신규 FrontController 추가

  • system의 신규 Controller를 다음과 같이 생성합니다.

/system/src/Bundle/Controller/Front/Test/SampleController.php

  • 신규 Controller의 URI는 /test/sample이 됩니다.
<?php
namespace Bundle\Controller\Front\Test;

class SampleController extends \Controller\Front\Controller
{
    /**
     *
     * Description
     */
    public function index()
    {
        $data = array(
            "data1" => "sample data1",
            "data2" => "sample data2",
            "data3" => "sample data3",
        );
        $this->setData($data);
    }
}
<div>{=data1}</div>
<div>{=data2}</div>
<div>{=data3}</div>
sample data1
sample data2
sample data3

User에서 system의 FrontController 재정의

  • 위에서 추가한 신규 Controller를 user에서 재정의하는 코드입니다.
  • system의 신규 Controller를 대신할 Controller를 생성합니다. /user/module/Controller/Front/Test/SampleController.php
  • /test/sample로 접속하면 아래와 같이 화면에 나옵니다. 재정의된 Controller에서 실행한 debug로그가 화면에 보여지게 됩니다.
<?php
namespace Controller\Front\Test;

class SampleController extends \Bundle\Controller\Front\Test\SampleController
{

    public function index()
    {
        $data = array(
            "data3" => "extends sample data3"
        );
        $this->setData($data);
    }
}
extends sample data3
  • 재정의한 system 컨트롤러의 로직 수행도 같이 할 경우 user 컨트롤러에서 parent의 index를 호출합니다.
<?php
namespace Controller\Front\Test;

class SampleController extends \Bundle\Controller\Front\Test\SampleController
{

    public function index()
    {
 		parent::index();
        $data = array(
            "data3" => "extends sample data3"
        );
        $this->setData($data);
    }
}
sample data1
sample data2
extends sample data3

user의 신규 FrontController 추가

  • '/user/module/Controller/Front/Test/NewSampleController.php' 경로에 신규 파일을 생성 후 아래의 코드를 입력합니다.
<?php
namespace Controller\Front\Test;

class NewSampleController extends \Controller\Front\Controller
{

    public function index()
    {
        $data = array(
            "data1" => "new sample data1"
            , "data2" => "new sample data2"
            , "data3" => "new sample data3"
        );
        $this->setData($data);
    }
}
  • '/user/data/skin/food_story/test/new_sample.html' 경로에 NewTest컨트롤러의 Template파일(skin)을 생성하고 아래의 코드를 입력합니다.
  • '/test/new_sample'로 접속해 확인합니다.
<div>{=data1}</div>
<div>{=data2}</div>
<div>{=data3}</div>
new sample data1
new sample data2
new sample data3

User 컨트롤러 재정의

  • '/user/module/Controller/Front/Test/NewExtendsSampleController.php' 경로에 신규 파일을 생성 후 아래의 코드를 입력합니다.
namespace Bundle\Controller\Front\Test;

class NewExtendsSampleController extends \Controller\Front\Test\NewSampleController
{

    public function index()
    {
        $data = array(
        	// system 컨트롤러를 재정의할 때와 마찬가지로 parent의 함수를 호출하여 부모클래스의 함수를 사용할
            "data3" => "new extends sample data3"
        );
        $this->setData($data);
    }
}
  • /user/data/skin/food_story/test/new_extends_sample.html 경로에 Template파일(skin)을 생성하고 아래의 코드를 입력합니다.
  • /test/new_extends_sample접속해 확인합니다.
<div>{=data1}</div>
<div>{=data2}</div>
<div>{=data3}</div>
new extends sample data3