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');
}
}
?>