2009-10-28 4 views
2

Je veux deux méthodes spéciales:Comment utiliser l'auto Catalyst et commencer?

  • qui fonctionne pour toutes les URL
  • qui ne fonctionne que pour un chemin spécifique (/admin)

Je pensais que le plus général serait en utilisant begin, et la méthode pour /admin utiliserait auto. Par exemple, dans ces deux contrôleurs Catalyst:

package MyApp::Controller::Root; 

sub begin :Private { 
    my ($self, $c) = @_; 

    $c->log->debug('Run for all URLs'); 
} 

[...]

package MyApp::Controller::Admin; 

sub auto :Private { 
    my ($self, $c) = @_; 

    $c->log->debug('Run for /admin only'); 
} 

Mais cela ne mène à ce que je veux. Quelle est la bonne solution?

EDIT: le problème est que Addmin::auto() est jamais appelé, pas quand j'accéder à /admin ou /admin/

Après plus de tests, auto est jamais appelé. J'ai essayé de mettre l'automobile à différents endroits, elle n'est jamais appelée.

+0

Vous allez devoir fournir plus d'informations. –

Répondre

3

Le problème était en fait ce qui suit: les deux contrôleurs avaient cette ligne:

__PACKAGE__->config->{namespace} = ''; 

Cela a empêché la fonction automatique pour déclencher dans Admin.pm

3

Il n'y a pas de raison évidente pour que ce que vous avez décrit ne fasse pas ce dont vous avez besoin. Ce serait la bonne façon de le faire.

Le journal doit afficher le chemin d'acheminement et indiquer si votre requête a été acheminée via ces actions ou non. Sinon, il vous dira comment il est géré.

La deuxième ligne de chaque sous-ligne doit être terminée par un ';'. Je suppose que c'est une faute de frappe dans SO, pas votre code d'origine.

+0

Les disparus; était une faute de frappe, merci – Julien

1

Avez-vous une action de début dans Controller :: Admin? Comme le dit RET, la façon dont vous avez décrit les choses devrait fonctionner correctement; le seul inconvénient avec un "début global" est que si vous mettez un début dans n'importe quel autre contrôleur, il "ombrera" le global, car un seul début est exécuté par action, et c'est le "le plus spécifique" (le plus long terme). de l'espace de noms du chemin privé).

Questions connexes