1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
Even though it's still a young project, an active community is starting
to emerge around Dancer. Some modules start to appear on CPAN and github
to add functionalities, or to extend existing ones.
** Templates
By default, Dancer comes with support for two templating systems:
Template Toolkit and Dancer::Template::Simple, a small templating engine
written by sukria. But support for other templating systems are
available:
- Dancer::Template::Tenjin by ido
- Dancer::Template::Sandbox by Sam Graham
- Dancer::Template::Tiny by Sawyer
- Dancer::Template::MicroTemplate by me
- Dancer::Template::Mason by Yanick Champoux
- Dancer::Template::Haml by David Moreno
** Logger
Out of the box, Dancer only has a simple logging system to write to
file, but more logging sytems are available:
#+BEGIN_HTML
<ul>
#+END_HTML
#+BEGIN_HTML
<li>
#+END_HTML
Dancer::Logger::Syslog by sukria
#+BEGIN_HTML
</li>
#+END_HTML
#+BEGIN_HTML
<li>
#+END_HTML
Dancer::Logger::LogHandler by me
#+BEGIN_HTML
</li>
#+END_HTML
#+BEGIN_HTML
<li>
#+END_HTML
Dancer::Logger::PSGI by me
#+BEGIN_HTML
</li>
#+END_HTML
#+BEGIN_HTML
</ul>
#+END_HTML
The last one is for writing directly your log message via Plack. You can
use a middleware like P::M::LogDispatch or P::M::Log4perl to handle logs
for your application. Even better, if you use P::M::ConsoleLogger, you
can have logs from your Dancer application in your javascript console.
** Debug
To debug your application with Plack, you can use the awesome
Plack::Middleware::Debug. I've writen Dancer::Debug (which requires my
fork of P::M::Debug), a middleware that add panels, with specific
informations for Dancer applications.
To activate this middleware, update your app.psgi to make it look like
this:
#+BEGIN_SRC perl
my $handler = sub {
my $env = shift;
my $request = Dancer::Request->new($env);
Dancer->dance($request);
};
$handler = builder {
enable "Debug", panels => [
qw/Dancer::Settings Dancer::Logger Environment Memory
ModuleVersions Response Session Parameters Dancer::Version /
];
$handler;
};
#+END_SRC
** Plugins
Dancer has support for plugins since a few version. There is not a lot
of plugins at the moment, but this will soon improve. Plugins support is
one of the top priorities for the 1.2 release.
*** Dancer::Plugin::REST
This one is really nice. This plugin, used with the serialization stuff,
allow you to write easily REST application.
#+BEGIN_SRC perl
resource user => get => sub { # return user where id = params->{id} },
create => sub { # create a new user with params->{user} },
delete => sub { # delete user where id = params->{id} },
update => sub { # update user with params->{user} };
#+END_SRC
And you got the following routes:
- GET /user/:id
- GET /user/:id.:format
- POST /user/create
- POST /user/create.:format
- DELETE /user/:id
- DELETE /user/:id.:format
- PUT /user/:id
- PUT /user/:id.:format
*** Dancer::Plugin::Database
This plugin, by bigpresh, add the database keyword to your app.
#+BEGIN_SRC perl
use Dancer;
use Dancer::Plugin::Database;
# Calling the database keyword will get you a connected DBI handle:
get '/widget/view/:id' => sub {
my $sth = database->prepare('select * from widgets where id = ?',
{}, params->{id});
$sth->execute;
template 'display_widget', {widget => $sth->fetchrow_hashref};
};
#+END_SRC
*** Dancer::Plugin::SiteMap
With this plugin, by James Ronan, a sitemap of your application is
created.
#+BEGIN_HTML
<blockquote>
#+END_HTML
Plugin module for the Dancer web framwork that automagically adds
sitemap routes to the webapp. Currently adds /sitemap and /sitemap.xml
where the former is a basic HTML list and the latter is an XML document
of URLS.
#+BEGIN_HTML
</blockquote>
#+END_HTML
** you can help! :)
There is still a lot of stuff to do. Don't hesitate to come on
#dancer@irc.perl.org to discuss ideas or new features that you would
like.
|