https://github.com/mp-php/fuelphp-packages-myorm
にUPしてあります。
--
created_atやupdated_atと同じノリで、created_ipとupdated_ipの保存をする
独自ORMパッケージを作成してみました。
created_ipとupdated_ipの型はvarcharで、長さは適当で良いかと。
以下、手順です。
fuel\packages下に"myorm"ディレクトリを作成。
"myorm"ディレクトリの中に、以下の3ファイルを作成。
fuel\packages\myorm\bootstrap.php
fuel\packages\myorm\classes\observer\createdip.php
fuel\packages\myorm\classes\observer\updatedip.php
各ファイルは、以下の内容になります。
fuel\packages\myorm\bootstrap.php
<?php Autoloader::add_classes(array( 'MyOrm\\Observer_CreatedIp' => __DIR__.'/classes/observer/createdip.php', 'MyOrm\\Observer_UpdatedIp' => __DIR__.'/classes/observer/updatedip.php', )); /* End of file bootstrap.php */
fuel\packages\myorm\classes\observer\createdip.php
<?php
namespace MyOrm;
class Observer_CreatedIp extends \Orm\Observer
{
public static $property = 'created_ip';
protected $_property;
public function __construct($class)
{
$props = $class::observers(get_class($this));
$this->_property = isset($props['property']) ? $props['property'] : static::$property;
}
public function before_insert(\Orm\Model $obj)
{
$obj->{$this->_property} = \Input::real_ip();
}
}
// End of file createdip.phpfuel\packages\myorm\classes\observer\updatedip.php
<?php
namespace MyOrm;
class Observer_UpdatedIp extends \Orm\Observer
{
public static $property = 'updated_ip';
protected $_property;
public function __construct($class)
{
$props = $class::observers(get_class($this));
$this->_property = isset($props['property']) ? $props['property'] : static::$property;
}
public function before_save(\Orm\Model $obj)
{
if ($obj->is_new() or $obj->is_changed())
{
$obj->{$this->_property} = \Input::real_ip();
}
}
}
// End of file createdip.phpこのパッケージを使用するためにはapp/config/config.phpのalways_loadのpackagesに追加する必要があります。
'packages' => array( 'orm', 'myorm', ),
myormを使用するということは、まず間違いなくormも使用するはずなので、
この2つを有効にして下さい。
Modelの$_observersは以下のようになります。
protected static $_observers = array(
'Orm\Observer_CreatedAt' => array('events'=>array('before_insert'), 'mysql_timestamp' => true,),
'Orm\Observer_UpdatedAt' => array('events'=>array('before_save'), 'mysql_timestamp' => true,),
'Orm\Observer_Validation'=> array('events'=>array('before_save')),
// MyOrm
'MyOrm\Observer_CreatedIp'=>array('events'=>array('before_insert')),
'MyOrm\Observer_UpdatedIp'=>array('events'=>array('before_save')),
);"// MyOrm"の行以下が、今回の話と関係しています。
これで、標準ORMパッケージに依存しつつ、完全に分離できたので
思う存分、ORMに独自の機能を追加できそうです。
No comments:
Post a Comment