2011-12-26 4 views

답변

1

당신은 모델 수준에서 관련 개체를 추가 할 수 있습니다 :이, 당신은 항상 당신의 "편집"에 대한 사용자 지정 처리기를 만들 수 있습니다 및 "삭제"버튼을 사용하여 작업을 수행하는 옵션이 아닌 경우

https://stackoverflow.com/a/7466839/204819

내부 ORM 또는 심지어 모델 수준.

+0

모델을 사용하여 예제를 추가했습니다. 편집 및 삭제 버튼을 재정의하는 데 필요한 코드 예제가 있습니까? 감사 –

1

beforeInsert, afterInsert, beforeDelete, afterDelete 및 beforeUpdate afterUpdate 함수를 사용하여 데이터베이스에서 추가 처리를 수행 할 수 있습니다. 예를 들어 웹 루트에서 ATK 4.1.3의 압축을 푼 설치를 사용하면 아래에 ATKHOME이라고하는 agiletoolkit이라는 폴더가 생성됩니다.

세 개의 필드 (id, tasktype_desc 및 budget_code)와 id 및 budget_code 만있는 다른 테이블 TASKTYPE_BUDGET을 사용하여 mysql에서 간단한 테이블 TASKTYPE을 생성하십시오.

가있는 테이블에 대한 두 가지 모델을 만들기 LIB ATKHOME// 모델 다음과 같이 이노 디비를 사용하여 외부 키를 가지고있는 경우

class Model_TaskType extends Model_Table { 
    public $entity_code='tasktype'; 
    public $table_alias='ty'; 

    function defineFields(){ 
      parent::defineFields(); 

      $this->newField('id') 
       ->mandatory(true);; 

      $this->newField('tasktype_desc') 
       ->mandatory(true); 

      $this->newField('budget_code') 
       ->mandatory(true); 
     } 

     public function afterInsert($new_id){ 
     $ttb=$this->add('Model_TaskTypeBudget'); 
     $ttb->set('id',$new_id) 
      ->set('budget_code',$this->get('budget_code')); 
     $ttb->insert(); 
     return $this; 
     } 

     public function beforeUpdate(&$data){ 
     $ttb=$this->add('Model_TaskTypeBudget')->loadData($data['id']); 
     $ttb->set('budget_code', $data['budget_code']); 
     $ttb->update(); 
     return $this; 
     } 

     public function beforeDelete(&$data){ 
     $ttb=$this->add('Model_TaskTypeBudget')->loadData($data['id']); 
     $ttb->delete(); 
     return $this; 
     } 
} 

주 (존재 나던 경우 모델 디렉토리를 작성해야 할 수도 있습니다) 당신은 올바른 순서로 삽입 및 삭제를해야합니다. TaskTypeBudget에서 TaskType에 대한 ID의 외래 키가 있다면 제약 조건 위반을 방지하기 위해 beforeDelete와 afterInsert를 사용해야합니다.

class Model_TaskTypeBudget extends Model_Table { 
    public $entity_code='tasktype_budget'; 
    public $table_alias='tyb'; 

    function defineFields(){ 
      parent::defineFields(); 

      $this->newField('id') 
       ->mandatory(true); 

      $this->newField('budget_code') 
        ->mandatory(true); 

    } 
} 

그리고이

class page_tasktype extends Page { 

    function init(){ 
     parent::init(); 
     $p=$this; 

     $tt=$this->add('Model_TaskType'); 
     $crud=$p->add('CRUD'); 
     $crud->setModel($tt, array('id','tasktype_desc', 'budget_code')); 

     if($crud->grid) 
      $crud->grid->addPaginator(10); 
     } 
} 

주와 같은 ATKHOME/페이지의 페이지도 개방 <를 포함 조심? PHP는 각 클래스 라인 전에 태그를 닫지 만 폐쇄를 포함하지 마십시오? > 이는 Ajax에서 오류를 일으킬 수 있기 때문입니다.

ATKHOME/config-default.php에서 mysql 연결 사용자 이름과 암호를 root/root에서 mysql 데이터베이스의 사용자 및 암호로 수정하십시오.

$config['dsn']='mysql://atktest:[email protected]/atktest'; 

및 주석 모든 페이지 (당신은 또한 단지 $ this-> dbConnect를 (추가 할 수 있습니다) 데이터베이스에 연결할 수 있도록 라인 8 ATKHOME/lib 디렉토리/Frontend.php을 수정;. 페이지에 라인

같은 Frontend.php에서
class Frontend extends ApiFrontend { 
function init(){ 
    parent::init(); 
    $this->dbConnect(); //uncommented 

는, 우리의 새로운 페이지를 추가하려면 기본 메뉴에 버튼을 추가 라인 (50)의 주위에 다음을 삽입합니다.

->addMenuItem('CRUD Test', 'tasktype') 

는 이제 웹 브라우저로 이동 http://localhost/agiletoolkit를 입력 첫 페이지에서 CRUD Test를 클릭하십시오. 행을 추가하면 TASKTYPE에 행이 추가되고 동일한 id 및 budget_code가 TASKTYPE_BUDGET에 추가됩니다. budget_code를 수정하면 두 테이블 모두에 반영되고 행을 삭제하면 두 테이블에서 모두 삭제됩니다.

일단 ATk4가 제공하는 기능을 알고 있으면 얼마나 간단하고 간단합니까?