Dancer::Plugin::Legacy::Routing - Dancer Plugin for Deprecating Existing Routes


    package MyDancerApp;

    use strict;
    use warnings;

    use Dancer;
    use Dancer::Plugin::Legacy::Routing;

    get        "/my/fancy/new/route"  => \&still_good_controller;
    legacy_get "/my/stinky/old/route" => \&still_good_controller;

    sub still_good_controller {
      status 200;
      return "Plugins Rocks!";


Often times in refactoring and general software development of web applications a developer will find themselves with the need to support all existing routes while at the same time building out a better set of routes. The major problem here is to find all applications, templates, bookmarks, and all other references to these old routes, that is not always possible.

Enter Dancer::Plugin::Legacy::Routing, this plugin for Dancer allows you to clean up and improve all of your routes while still maintaining all of your old ones in a clean and easy to see and understand way. You can even optionally get log entries that will tell you how people are getting to your old routes and how often they are being called.


Dancer::Plugin::Legacy::Routing makes use of the standard Dancer environment based routing. Since this is a plugin, be sure to include this is the correct place under plugins.



Currently "log" is the only option (this will likely be built out in future versions). Having this set to a truthy value will result in messages being written (with the level of info) to your dancer log file.

    [30494]  info @0.000631> [hit #2]Legacy Route GET '/legacy/get' referred from '(none)' in repos/Dancer-Plugin-Legacy-Routing/lib/Dancer/Plugin/Legacy/ l. 32

YAML Example Configuration File

    logger: file
    log: info
    warnings: 1
    show_errors: 1
    auto_reload: 0

        log: 1

NOTE The name of this plugin is Legacy::Routing, that is what you want to specify in your environment's configuration file.


The standard HTTP methods are available for you to legacy-ify, including any.


    get "/good/get"          => \&test_get;
    legacy_get "/legacy/get" => \&test_get;

    get "/good/get/:var"          => \&test_get_with_var;
    legacy_get "/legacy/get/:var" => \&test_get_with_var;

    get "/good/get/:var/params"          => \&test_get_with_params;
    legacy_get "/legacy/get/:var/params" => \&test_get_with_params;


    post "/good/post"          => \&test_post;
    legacy_post "/legacy/post" => \&test_post;

    post "/good/post/:var"          => \&test_post_with_var;
    legacy_post "/legacy/post/:var" => \&test_post_with_var;

    post "/good/post/:var/params"          => \&test_post_with_params;
    legacy_post "/legacy/post/:var/params" => \&test_post_with_params;


    put "/good/put"          => \&test_put;
    legacy_put "/legacy/put" => \&test_put;

    put "/good/put/:var"          => \&test_put_with_var;
    legacy_put "/legacy/put/:var" => \&test_put_with_var;

    put "/good/put/:var/params"          => \&test_put_with_params;
    legacy_put "/legacy/put/:var/params" => \&test_put_with_params;


    del "/good/delete"          => \&test_del;
    legacy_del "/legacy/delete" => \&test_del;

    del "/good/delete/:var"          => \&test_del_with_var;
    legacy_del "/legacy/delete/:var" => \&test_del_with_var;

    del "/good/delete/:var/params"          => \&test_del_with_params;
    legacy_del "/legacy/delete/:var/params" => \&test_del_with_params;


    any "/good/any"          => \&test_any;
    legacy_any "/legacy/any" => \&test_any;


Robert Stone <drzigman AT cpan DOT org >


Copyright 2014 Robert Stone

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU Lesser General Public License as published by the Free Software Foundation; or any compatible license.

See for more information.