Is there a way to define an attribute setter method on a model? I want to ensure that any attempt to set a date attribute on a model by way of populateModel() or myModel->foo = 'bar' (basically any method of setting a value) is intercepted so I can set a default if the value isn't valid.

Put another way, if you attempt to set a date prior to today (or a string that's not a date), I want to set the attribute to be today's date.

Currently I'm doing that in my populateModel() method but that doesn't catch the setAttribute('foo') approach or the myModel->foo approach.

For example in Laravel, we can create a setter method: setFooAttribute() so I was hoping for something similar.
In your model you can override setAttribute(), which covers calling setAttribute('foo', 'bar') directly as well as $model-&gt;foo = 'bar'.

public function setAttribute($name, $value)
{
    if ($name == 'foo')
    {
        // Not sure if your value will be a dateTime object, string, etc.
        // But check to see if it's &lt; than today's current date.  If so,
        // set $value = new DateTime();
    }

    parent::setAttribute($name, $value)
}