Jan 30

逆引きrhaco32: CRUDを作る(rhaco1.6.1用)

1.6.1版を書いたらその前のが消えちゃいました><

  • Urlsで直接指定する

  • index.php

<?php
require_once("./__init__.php");
Rhaco::import("generic.Urls");
Rhaco::import("database.DbUtil");
Rhaco::import("model.Product");
$db = new DbUtil(Product::connection());
$pattern = array(
  "^list\/?$"=>array("method"=>"read","args"=>array(new Product())),
  "^detail\/([0-9]+?)\/?$"=>array("method"=>"detail","args"=>array(new Product())),
  "^create\/?$"=>array("method"=>"create","args"=>array(new Product(),"path/to/redirect")),
  "^update\/([0-9]+?)\/?$"=>array("method"=>"update","args"=>array(new Product(),null,"path/to/redirect")),
  "^delete\/([0-9]+?)\/?$"=>array("method"=>"drop","args"=>array(new Product(),"path/to/redirect"))
);
$parser = Urls::parser($pattern,$db);
$parser->write();
?>



  • Viewsをextendしたクラスを使う

  • コード量は若干増えますが後で拡張しやすくなります。


index.php
<?php
require_once("./__init__.php");
Rhaco::import("generic.Urls");
Rhaco::import("database.DbUtil");
Rhaco::import("model.Product");
Rhaco::import("CRUD");
$pattern = array(
  "^list\/?$"=>array("class"=>"CRUD","method"=>"productList"),
  "^detail\/([0-9]+?)\/?$"=>array("class"=>"CRUD","method"=>"productDetail"),
  "^create\/?$"=>array("class"=>"CRUD","method"=>"productCreate"),
  "^update\/([0-9]+?)\/?$"=>array("class"=>"CRUD","method"=>"productUpdate"),
  "^delete\/([0-9]+?)\/?$"=>array("class"=>"CRUD","method"=>"productDelete")
);
$parser = Urls::parser($pattern,new DbUtil(Product::connection()));
$parser->write();
?>


library/CRUD.php
<?php
Rhaco::import("generic.Views");
Rhaco::import("model.Product");
class CRUD extends Views {
  function productList(){
    return $this->read(new Product(), new C(Q::like(Product::name(),"hoge","p")));
  }
  function productDetail($id){
    return $this->detail(new Product($id));
  }
  function productCreate(){
    return $this->create($this->toObject(new Product()),'path/to/redirect');
  }
  function productUpdate($id){
    return $this->update($this->toObject(new Product()),new C(Q::eq(Product::columnId(),$id)),'path/to/redirect');
  }
  function productDelete($id){
    return $this->drop(new Product($id),'path/to/redirect');
  }
}
?>


  • 独自クラスを使う

  • 柔軟性が高く、この中でViewsを使うことも当然出来るので便利。


index.php
<?php
require_once("./__init__.php");
Rhaco::import("generic.Urls");
Rhaco::import("CRUD");
$pattern = array(
  "^list\/?$"=>array("class"=>"CRUD","method"=>"read"),
  "^detail\/([0-9]+?)\/?$"=>array("class"=>"CRUD","method"=>"detail"),
  "^create\/?$"=>array("class"=>"CRUD","method"=>"create"),
  "^update\/([0-9]+?)\/?$"=>array("class"=>"CRUD","method"=>"update"),
  "^delete\/([0-9]+?)\/?$"=>array("class"=>"CRUD","method"=>"drop")
);
$parser = Urls::parser($pattern);
$parser->write();
?>


library/CRUD.php
<?php
Rhaco::import("generic.Views");
Rhaco::import("model.Product");
Rhaco::import("database.DbUtil");
Rhaco::import("model.Product");
class CRUD {
  var $_view;
  function CRUD(){
    $this->_view = new Views(new DbUtil(Product::connection()));
  }
  function read(){
    return $this->_view->read(new Product(), new C(Q::like(Product::name(),"hoge","p")));
  }
  function detail($id){
    return $this->_view->detail(new Product($id));
  }
  function create(){
    return $this->_view->create($this->_view->toObject(new Product()),'path/to/redirect');
  }
  function update($id){
    return $this->_view->update($this->_view->toObject(new Product()),new C(Q::eq(Product::columnId(),$id)),'path/to/redirect');
  }
  function productDelete($id){
    return $this->_view->drop(new Product($id),'path/to/redirect');
  }
}
?>

| comment(0)