J'ai suivi l'exemple à http://wiki.class-dbi.com/wiki/Overriding_autogenerated_accessorsComment remplacer les accesseurs générés automatiquement dans Perl's Class :: DBI?
Je souhaite modifier l'URL avant qu'il ne soit inséré dans la base de données:
package Hosting::Company;
use base 'Class::DBI';
my $class = __PACKAGE__;
$class->table('Companies');
$class->columns(Primary => 'CompanyId');
$class->columns(Others => qw/Name Url Comment/);
sub Url {
my $self = shift;
# modify URL.
if (@_) {
$_[0] = 'aaaaaaaaaaaa';
# return $self->_Url_accessor('aaaaaaaaaaaa'); - doesn't work either
}
# Back to normal Class::DBI
return $self->_Url_accessor(@_);
}
Mais il ne fonctionne pas:
my $company = Hosting::Company->insert({ Name => 'Test', Url => 'http://http://url' });
print $company->Url, "\n";
Spectacles:
http://http://url
Je souhaite la classe: DBI mailing la liste était encore en vie!
Vous voulez expliquer vos downvotes? – innaM
Je pense que vous voulez dire 'return $ self -> _ Url_accessor (@_);' et 'my $ url = $ self -> _ Url_accessor();' – Schwern
J'ai supprimé la liste déroulante. Vous avez raison à propos du remplacement de l'accesseur de l'OP. Je pensais que c'était uniquement dû au problème insert-doesn't-use-accessors. – Schwern