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.php
fuel\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