Scaffolding

응용 프로그램의 스캐 폴딩(scaffolding)은 개발자가 객체를 생성, 검색, 업데이트, 삭제 등 기본적인 어플리케이션을 정의, 생성하는 테크닉 입니다. CakePHP의 스캐 폴딩은 개체들이 서로 어떻게 관련되어 있는지를 정의하고 그 연결의 생성 및 삭제가 가능합니다.

scaffold를 만들려면 모델과 컨트롤러가 필요합니다. 컨트롤러에 $scaffold 변수를 설정하는 것만으로 동작합니다.

CakePHP의 스캐 폴딩은 꽤 훌륭합니다. 기본적인 CRUD 애플리케이션을 몇 분 안에 만들어 움직일 수 있습니다. 너무 좋기 때문에 프로덕션 환경에서 사용하고 싶을지도 모릅니다. 정말 좋은 것입니다만, 스캐 폴딩은 어디 까지나 단순한 발판에 불과하다는 것을 명심 하십시오. 발판은 프로젝트의 초기 단계에서 어쨌든 빨리 움직이게 하기 위해 거친 구조로되어 있습니다. 유연성이보다는 어쨌든 움직이기위한 일시적인 방법이라고 말할 수 있겠지요. 만약 로직과 뷰를 직접 정의하고 싶습니다 시작하면 코드를 작성하는 발판을 사용하는 것을 그만 둘 타이밍이라고 말할 수 있습니다. 다음 장에서 설명하는 CakePHP의 Bake 콘솔은 굉장한 다음 한걸음이며, 현재의 발판과 같은 결과가 되는 코드를 생성합니다.

스캐 폴딩은 web 어플리케이션 개발 초기에 필요한 코드를 얻을 수있는 좋은 방법입니다. 설계 초기 단계에서 데이터베이스 스키마 변경은 흔히 있는 일입니다. 그러나 이 것은 web 개발자는 확정 되지 않고 어떻게 사용될지 모르는 단계에서 입력 양식 만드는 것을 싫어한다는 단점이 발생합니다. 개발자의 부담을 경감시키기 위해 CakePHP는 스캐 폴딩 기능을 제공합니다. 스캐 폴딩은 데이터베이스 테이블을 분석하여 추가, 삭제, 편집 버튼이 붙어있는 표준 목록 편집을위한 표준 양식 데이터베이스의 1 레코드를보기위한 표준 뷰를 만듭니다.

스캐 폴딩을 추가하기 위해 컨트롤러에서 $scaffold 변수를 추가하십시오. :

   class CategoriesController extends AppController {
      public $scaffold;
  }

/app/Model/Category.php 기본적인 Category 모델 클래스를 이미 작성했다고하면 준비는 이상입니다. 새로운 발판을 보기 위하여 http://example.com/categories 를 방문해보세요.

발판이 만들어진 컨트롤러 메소드를 작성하면 생각대로의 결과가 나오지 않을 때가 있습니다. 예를 들어, 발판이 만들어진 컨트롤러에 index () 메소드를 작성한 경우 index 메소드는 스캐 폴딩 기능보다 우선적으로 그려집니다.

스캐 폴딩은 모델 사이의 관계에 대한 지식을 제공합니다. 만약 Category 모델이 User에 종속 (belongsTo)하고 있었을 경우, Category 목록에 관련있는 User의 ID가 표시되는 것입니다. 스캐 폴딩은 모델 사이의 관계에 대해 “알고”있습니다 만, 수동으로 모델의 관계를 나타내는 코드를 추가 할 때까지는 발판 뷰에 관련 레코드가 표시되지 않습니다. 예를 들어, 만약 Group이 여러 User를 가지고 (hasMany), User가 Group에 종속 (belongsTo)하는 경우 다음 코드를 User와 Group 모델에 수동으로 추가해야합니다. 이 코드를 추가하기 전에이라고 User 추가 양식 Group에 대한 select 박스가 공백으로 표시됩니다. :

   // In Group.php
   public $hasMany = 'User';
   // In User.php
   public $belongsTo = 'Group';

만약 ID가 아닌 다른 것 (예를 들어 사용자 이름 등)을 표시 할 경우 $displayField 변수를 모델로 설정하십시오. 그럼 스캐 폴딩에서 ID 대신 이름으로 카테고리에 관련한 사용자가 표시되도록 User 클래스에 $displayField을 설정하자. :

  class User extends AppModel {
     public $name = 'User';
     public $displayField = 'first_name';
 }

Scaffolding을 사용하여 간단한 관리 인터페이스를 작성하기

만약 app/Config/core.php에서 관리 라우팅을 유효하도록 할 경우, Configure::write(‘Routing.prefixes’, array(‘admin’));로하는 것으로 관리자 인터페이스를 생성하기 위해 검사 폴딩을 사용할 수있게됩니다.

일단 관리 라우팅을 활성화 한 후 스캐 폴딩 변수에 admin 접두어를 설정하십시오. :

  public $scaffold = 'admin';

이상으로 관리 발판 액션에 액세스 할 수 있습니다. :

 http://example.com/admin/controller/index
 http://example.com/admin/controller/view
 http://example.com/admin/controller/edit
 http://example.com/admin/controller/add
 http://example.com/admin/controller/delete

이것은 간단한 백엔드 인터페이스를 빠르게 만들 수있는 간단한 방법입니다. 그러나 관리용 및 비 관리용 스케폴딩의 메소드를 동시에 사용할 수 없다는 것을 기억하십시오. 보통의 스케폴딩에서는 개별 메소드를 덮어 쓰거나 자체 구현으로 대체 할 수 있습니다. :

 public function admin_view ($id = null) {
   // custom code here
 }

일단 발판 액션을 옮기게 되면 액션과 동일한 뷰 파일을 작성해야 합니다.

Scaffold 뷰의 커스트마이징

만약 발판으로 생성 된 뷰에 약간의 차이가 발견 것 같으면 템플릿을 만들 수 있습니다. 프로덕션 환경에서 이 기술을 사용하는 것은별로 추천하지 않지만, 프로토 타입 개발 사이라면 여기에서 소개하는 커스트마이즈는 도움이 됩니다.

특정 컨트롤러 (예 PostsController)에 대한 자신의 발판 뷰는 다음과 같이 대체한다. :

/app/View/Posts/scaffold.index.ctp
/app/View/Posts/scaffold.form.ctp
/app/View/Posts/scaffold.view.ctp

모든 컨트롤러에 대한 자신의 스케폴딩 뷰는 다음과 같이 대체해야 합니다. :

/app/View/Scaffolds/index.ctp
/app/View/Scaffolds/form.ctp
/app/View/Scaffolds/view.ctp

'PHP' 카테고리의 다른 글

[CakePHP] Controller - Components  (0) 2015.05.08
[CakePHP] Controller - PageController  (0) 2015.05.08
[CakePHP] CakeResponse  (0) 2015.05.07
[CakePHP] CakeRequest 요청 객체  (0) 2015.05.07
cakePhp- controller  (0) 2015.05.06
Posted by dewnine
,