2013-03-31 3 views
1

Par défaut, Catalyst::Dispatch émet une erreur quand une ressource inconnue (essentiellement une erreur 404, par ma compréhension) est demandée:Comment supprimer/déclassement des erreurs « des ressources inconnues » de Catalyst

délégué l'envoi à la action qui correspondait à l'URL, ou retourner un message sur la ressource inconnue

et le fichier journal de mon application montre:

Mar 30 10:19:08 mail myapp: Unknown resource "user/soapCaller.bs" 
Mar 30 16:20:38 mail myapp: Unknown resource "HTTP/1.1" 
Mar 30 16:20:38 mail myapp: Unknown resource "index.php" 

Sans doute, cela semble être un bug pour moi; un simple 404 ne devrait pas vraiment être considéré sur un pied d'égalité avec un "Impossible de se connecter à la base de données" erreur, mais ce n'est pas la question. Ma question est:

Comment puis-je changer ce comportement?

J'ai eu un succès limité avec la création d'un simple défaut () Action dans Root.pm:

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

Ce réduit au silence avec succès les erreurs dans le fichier journal, cependant, j'ai eu aucune écriture de succès mon propre message de journal/priorité. Aucune des tentatives suivantes de sortie de mon propre avertissement ne réussit. Alors, quelle est la meilleure approche pour définir mon propre comportement pour les "ressources inconnues" dans une application Catalyst?

+1

Créer une racine 'default' est la bonne chose à faire (bien que' sub default: Private' soit une ancienne pratique obsolète, 'sub default: Path' fera très bien l'affaire ...). Quant à savoir pourquoi votre enregistreur ne fonctionne pas, nous avons besoin de plus d'informations. D'après ce que vous avez montré, il n'y a aucune raison de ne pas le faire. – hobbs

+0

@hobbs: Je suis passé à 'Path', et le comportement est le même. De quelles informations supplémentaires avez-vous besoin concernant la journalisation? J'utilise les plugins 'LogWarnings' et' LogDispatch'. – Flimzy

Répondre

0

Le problème était que j'avais une action auto(), qui s'exécutait avant default(), et redirigé vers une autre page.

sub auto : Private { 
    my ($self, $c) = @_; 
    ... 
    if (! $c->user_exists) { 
     $c->redirect($c->uri_for('/login')); 
    } 
} 

j'ai pu résoudre ce problème en ajoutant:

return 1 if $c->action eq 'default'; 

avant la redirection.

Questions connexes