Как переопределить автоматически сгенерированные методы доступа в Perl Class::DBI?


person Julien    schedule 31.01.2009    source источник


Ответы (2)


Переопределение аксессора не изменяет insert. Лучший способ справиться с нормализацией данных — переопределить normalize_column_values(). Но Манни прав, твой аксессуар сломан.

PS список рассылки CDBI все еще активен, просто в нем мало сообщений. Большинство из них перешли на DBIx::Class.

person Community    schedule 31.01.2009

В вашем URL-аксессоре вы проверяете, был ли параметр передан этому методу. Но вы ничего не передаете, поэтому метод доступа ничего не сделает, кроме вызова _Url_accessor(). Вероятно, вам следует сначала вызвать _Url_accessor, а затем изменить результат:

sub Url {
    my $self = shift;

    # Was there a param passed in?
    if ( @_ ) {
         # Do you really want to modify it here?
         return $self->_Url_accessor(@_);
    }
    else {
        my $url = $self->_Url_accessor();
        # mangle result here:
        $url = 'aaaaaaaaa';
        return $url;
     }
}

Если вы хотите изменить URL-адрес еще до того, как он попадет в базу данных, я думаю, вы должны указать normalize_column_values ​​в своем классе, и это будет вызываться каждый раз при вставке.

person innaM    schedule 31.01.2009
comment
Я думаю, вы имеете в виду return $self->_Url_accessor(@_); и my $url = $self->_Url_accessor(); - person Schwern; 31.01.2009
comment
Я удалил отрицательный голос. Вы правы в том, что переопределение доступа к OP было разорвано. Я думал, что это было только из-за проблемы вставки-не-использования-аксессоров. - person Schwern; 31.01.2009