fuel / oil

Fuel PHP Framework - Fuel v1.x Oil command-line package
http://fuelphp.com/docs/packages/oil/intro.html
106 stars 67 forks source link

OIL generated observers not firing #195

Closed AlbinoGeek closed 11 years ago

AlbinoGeek commented 11 years ago

System: Windows Server 2008 R2 Apache 2.4.2 (64bit) PHP: 5.4.15 (mod_php5) + xDebug MySQL: 5.5 GA

Observers generated using oil generate scaffold ... are not firing (createdAt updatedAt)

WanWizard commented 11 years ago

ORM or Crud models?

AlbinoGeek commented 11 years ago

Erm, whatever is generated using: oil generate scaffold users email:string password:string displayname:string or similar command. Model file (after some modifications) listed below:

<?php
use Orm\Model;

class Model_User extends Model
{
    protected static $_properties = array(
        'id',
        'email',
        'password',
        'displayname',
        'created_at',
        'updated_at',
    );

    protected static $_observers = array( // this do not fire
        'Orm\Observer_CreatedAt' => array(
            'events' => array('before_insert'),
            'mysql_timestamp' => false,
        ),
        'Orm\Observer_UpdatedAt' => array(
            'events' => array('before_save'),
            'mysql_timestamp' => false,
        ),
    );

    public static function validate($factory)
    {
        $val = Validation::forge($factory);
        $val->add_field('email', 'Email Address', 'required|valid_email|max_length[255]');
        $val->add_field('password', 'Password', 'required|max_length[255]');
        $val->add_field('displayname', 'Display Name', 'required|max_length[32]');

        return $val;
    }

}
WanWizard commented 11 years ago

Weird, this looks fine to me. Checked a model in a working application, which contains

    /**
     * @var array   defined observers
     */
    protected static $_observers = array(
        'Orm\\Observer_CreatedAt' => array(
            'events' => array('before_insert'),
            'property' => 'created_at',
            'mysql_timestamp' => false
        ),
        'Orm\\Observer_UpdatedAt' => array(
            'events' => array('before_update'),
            'property' => 'updated_at',
            'mysql_timestamp' => false
        ),
        'Orm\\Observer_Typing' => array(
            'events' => array('after_load', 'before_save', 'after_save')
        ),
    );

These list the property name, but as 'updated_at' and 'created_at' are default values, it should work fine without them too.

WanWizard commented 11 years ago

More info on this one?

There was an issue related to the UpdatedAt observer, which was fixed recently (so it did fire, but it didn't do anything), but CreatedAt should be fine.

AlbinoGeek commented 11 years ago

I can no longer reproduce this issue, it seems to have been fixed.