Commit | Line | Data |
fc7ec1d9 |
1 | =head1 NAME |
2 | |
3 | Catalyst::Manual::Cookbook - Cooking with Catalyst |
4 | |
5 | =head1 DESCRIPTION |
6 | |
aba94964 |
7 | Yummy code like your mum used to bake! |
fc7ec1d9 |
8 | |
9 | =head1 RECIPES |
10 | |
11 | =head2 Force debug screen |
12 | |
13 | You can force Catalyst to display the debug screen at the end of the request by |
14 | placing a die() call in the _end action. |
15 | |
16 | __PACKAGE__->action( |
17 | '!end' => sub { |
18 | my ( $self, $c ) = @_; |
19 | die "testing"; |
20 | } |
21 | ); |
22 | |
23 | =head2 Disable statistics |
24 | |
25 | Just add this line to your application class if you don't want those nifty |
26 | statistics in your debug messages. |
27 | |
28 | sub Catalyst::Log::info { } |
29 | |
30 | =head2 Scaffolding |
31 | |
32 | Scaffolding is very simple with Catalyst. |
33 | Just use Catalyst::Model::CDBI::CRUD as baseclass. |
34 | |
35 | # lib/MyApp/Model/CDBI.pm |
36 | package MyApp::Model::CDBI; |
37 | |
38 | use strict; |
39 | use base 'Catalyst::Model::CDBI::CRUD'; |
40 | |
41 | __PACKAGE__->config( |
42 | dsn => 'dbi:SQLite:/tmp/myapp.db', |
43 | relationships => 1 |
44 | ); |
45 | |
46 | 1; |
47 | |
48 | # lib/MyApp.pm |
49 | package MyApp; |
50 | |
51 | use Catalyst 'FormValidator'; |
52 | |
53 | __PACKAGE__->config( |
54 | name => 'My Application', |
55 | root => '/home/joeuser/myapp/root' |
56 | ); |
57 | |
58 | __PACKAGE__->action( |
59 | 'table' => sub { |
60 | my ( $self, $c ) = @_; |
61 | $c->form( optional => [ MyApp::Model::CDBI::Table->columns ] ); |
62 | $c->forward('MyApp::Model::CDBI::Table'); |
63 | } |
64 | ); |
65 | |
66 | 1; |
67 | |
68 | Modify the $c->form() parameters to match your needs, and don't forget to copy |
69 | the templates. ;) |
70 | |
1df125c9 |
71 | ==head2 Serving static files and CSS as text/css |
aba94964 |
72 | |
73 | If you want to serve static content (like images, txt or CSS) via Catalyst, |
74 | then all you need is the plugin Catalyst::Plugin::Static as well as a small |
75 | regex to set the MIME type for CSS to text/css. |
76 | |
77 | # lib/MyApp.pm |
78 | package MyApp; |
79 | |
80 | use strict; |
81 | use Catalyst qw/-Debug Static/; |
82 | |
83 | __PACKAGE__->action( |
84 | |
85 | '!default' => sub { |
86 | my ( $self, $c ) = @_; |
87 | $c->serve_static; |
88 | }, |
89 | |
90 | '/^.*\.css$/' => sub { |
91 | my ( $self, $c ) = @_; |
92 | $c->serve_static('text/css'); |
93 | }, |
94 | ); |
95 | |
1df125c9 |
96 | ==head2 Uploads with Catalyst |
aba94964 |
97 | |
98 | To implement uploads in Catalyst you need to have a HTML form similiar to |
99 | this: |
100 | |
101 | <form action="/upload" method="post" enctype="multipart/form-data"> |
102 | <input type="hidden" name="form_submit" value="yes"> |
103 | <input type="file" name="my_file"> |
104 | <input type="submit" value="Send"> |
105 | </form> |
106 | |
107 | It's very important not to forget enctype="multipart/form-data" in form, |
108 | if it's not there, uploads just don't work. |
109 | |
110 | Catalyst Controller module 'upload' action: |
111 | |
112 | MyApp->action( |
113 | |
114 | 'upload' => sub { |
115 | my ($self, $c) = @_; |
116 | if ($c->req->parameters->{form_submit} eq 'yes') { |
117 | my $filename = $c->req->parameters->{my_file}; |
118 | if ($filename) { |
119 | my $fh = $c->req->uploads->{$filename}->{fh}; |
120 | open(NEW_FILE, ">/tmp/$filename") or die |
121 | "Can't open file for writing: $!"; |
122 | while ($fh->read(my $buf, 32768)) { |
123 | print NEW_FILE $buf; |
124 | } |
125 | close(NEW_FILE); |
126 | } |
127 | } |
128 | $c->stash->{template} = 'upload_form.tt'; |
129 | $c->forward('MyApp::V::View'); |
130 | }, |
131 | ); |
132 | |
133 | If you want to upload bigger files than 1MB, then just add to your Controller |
134 | module: |
135 | |
136 | $CGI::Simple::POST_MAX = 1048576000; |
137 | |
fc7ec1d9 |
138 | =head1 AUTHOR |
139 | |
140 | Sebastian Riedel, C<sri@oook.de> |
141 | |
142 | =head1 COPYRIGHT |
143 | |
144 | This program is free software, you can redistribute it and/or modify it under |
145 | the same terms as Perl itself. |