J'ai une classe qui ressemble à ceci:Pourquoi ne puis-je pas accéder à la configuration d'un modèle de catalyseur depuis l'intérieur du modèle?
package MyApp::Model::Skunk::Find::Images;
use Moose;
use namespace::autoclean;
extends 'Catalyst::Model::Factory';
use Data::Dump qw/dump/;
sub prepare_arguments {
my ($self, $c) = @_;
# these are for debugging purposes only
$c->log->info("package: " . __PACKAGE__);
$c->log->info("catalyst config: " . dump $c->config);
$c->log->info("images class: " . __PACKAGE__->config->{class});
$c->log->info("images root: " . __PACKAGE__->config->{root});
return { root => __PACKAGE__->config->{root} };
}
et myapp.conf ressemble à ceci (extrait):
<Model::Skunk::Find::Images>
root '/foo/bar/myapp/data/img'
class MyApp::Find
</Model::Skunk::Find::Images>
Je peux accéder à tout le hachage de configuration de l'application (je suis au courant de this réponse), mais je ne peux pas sembler être en mesure d'accéder à la classe config directement, donc
$c->log->info("images class: " . __PACKAGE__->config->{class});
$c->log->info("images root: " . __PACKAGE__->config->{root});
de l'intérieur MyApp :: Skunk :: Trouver :: Images les deux ne produisent rien.
Si je configure les variables à l'intérieur du paquet comme celui-ci:
__PACKAGE__->config(
class => 'MyApp::Find',
root => '/foo/bar/myapp/data/img'
);
tout fonctionne bien.
Quelqu'un peut-il vous aider à expliquer?
Excellent, la bonne réponse. J'ajouterais aussi que si un modèle a besoin d'accéder à l'objet Catalyst, alors le design est incorrect. – Horus
Merci, je vais essayer ça. Mon but est de pouvoir paramétrer myapp.conf au démarrage, de la même manière que l'on peut y établir la connexion dbi - voir l'exemple dans les docs pour Catalyst :: Model :: DBIC :: Schema – simone
@simone right, this est la bonne façon de le faire. – hobbs