FuelPHP - использование базовых классов в моделях ORM
Как я могу использовать базовый класс в моей модели ORM?
Работает:
protected static $_properties = array(
'id',
'user_id',
'v_key' => array('default' => 'abc' ),
'a_key' => array('default' => 'def' ),
'created_at',
'updated_at'
);
Не работает:
protected static $_properties = array(
'id',
'v_key' => array('default' => Str::random('alnum', 6) ),
'a_key' => array('default' => Str::random('alnum', 6) ),
'created_at',
'updated_at'
);
Спасибо!!
3 ответа
Ваша настоящая проблема заключается в том, что вы не можете выполнять вызовы функций при выполнении статических назначений в PHP. Как инициализировать статические переменные
Хорошо, я использовал наблюдателя, чтобы сделать это.
/classes/observer/session.php
<?php
namespace Orm;
use Str;
class Observer_Session extends Observer {
public function after_create(Model $session) {
$session->v_key = Str::random('alnum', 6);
$session->a_key = Str::random('alnum', 6);
}
/classes/model/session.php
Чтобы динамически установить значения по умолчанию, вы можете переопределить метод forge в вашей модели сеанса:
public static function forge($data = array(), $new = true, $view = null, $cache = true)
{
$data = \Arr::merge(array(
'v_key' => \Str::random('alnum', 6),
'a_key' => \Str::random('alnum', 6),
), $data);
return parent::forge($data, $new, $view, $cache);
}