fixed docs
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Manual / Cookbook.pod
CommitLineData
fc7ec1d9 1=head1 NAME
2
3Catalyst::Manual::Cookbook - Cooking with Catalyst
4
5=head1 DESCRIPTION
6
aba94964 7Yummy code like your mum used to bake!
fc7ec1d9 8
9=head1 RECIPES
10
11=head2 Force debug screen
12
13You can force Catalyst to display the debug screen at the end of the request by
14placing 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
25Just add this line to your application class if you don't want those nifty
26statistics in your debug messages.
27
28 sub Catalyst::Log::info { }
29
30=head2 Scaffolding
31
32Scaffolding is very simple with Catalyst.
33Just 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
68Modify the $c->form() parameters to match your needs, and don't forget to copy
69the templates. ;)
70
1df125c9 71==head2 Serving static files and CSS as text/css
aba94964 72
73If you want to serve static content (like images, txt or CSS) via Catalyst,
74then all you need is the plugin Catalyst::Plugin::Static as well as a small
75regex 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
98To implement uploads in Catalyst you need to have a HTML form similiar to
99this:
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
107It's very important not to forget enctype="multipart/form-data" in form,
108if it's not there, uploads just don't work.
109
110Catalyst 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
133If you want to upload bigger files than 1MB, then just add to your Controller
134module:
135
136 $CGI::Simple::POST_MAX = 1048576000;
137
fc7ec1d9 138=head1 AUTHOR
139
140Sebastian Riedel, C<sri@oook.de>
141
142=head1 COPYRIGHT
143
144This program is free software, you can redistribute it and/or modify it under
145the same terms as Perl itself.