2011-12-26 13 views

答えて

1

あなたはモデルレベルに関連するエンティティを追加することができます。これは、あなたが常にあなたの「編集」のカスタムハンドラを作成することができますし、「削除」ボタンを使用して、アクションを実行できない場合は

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

内部ORM、またはモデルレベルでさえも。

+0

これを実行するためにモデルを使用する例を追加しました。編集ボタンと削除ボタンをオーバーライドするために必要なコードの例がありますか?ありがとう –

1

afterUpdate関数beforeInsert、afterInsert、beforeDelete、afterDeleteおよびafterUpdateを使用して、データベースで追加の処理を実行できます。例えば あなたのウェブルートにATK 4.1.3の解凍されたインストールを使用するとagitoolkitと呼ばれるフォルダが作成されます。これはATKHOMEと呼ばれます。

3つのフィールド(id、tasktype_desc、budget_code)とidとbudget_codeだけを持つ別のテーブルTASKTYPE_BUDGETを持つmysqlで単純なテーブルTASKTYPEを作成します。

次のようにInnoDBテーブルを使用して外部キーを持っている場合は、

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; 
     } 
} 

(それが存在するdoesntの場合は、モデルのディレクトリを作成する必要がある場合があります)ATKHOME/libに/モデルに注意をテーブルのための2つのモデルを作成します。あなたは正しい順序で挿入と削除を行う必要があります。 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によって提供されていることがわかったら、それはどのようにすっきりと簡単ですか?

関連する問題