# NAME MVC::Neaf `[ni:f]` stands for **Not Even A Framework**. # OVERVIEW The following code can be run as a PSGI application or CGI script: use strict; use warnings; use MVC::Neaf; get + post "/" => sub { my $req = shift; return { -view => 'TT', -template => \'Hello, [% name %]!', -type => 'text/plain', name => $req->param( name => qr/\w+/, "Stranger" ), }; }; neaf->run; Just like many other frameworks, Neaf organises an application into a *prefix tree* of routes. Each *route* has a *handler* `sub` which receives one and only argument - a *request* object. The *request* contains *everything* the application needs to know about the outside world. The *handler* must either *return* a hash for rendering, or *die*. A 3-digit exception is a valid way of returning a configurable error page. The *return hash* may contain dash-prefixed keys to control Neaf itself. For instance, the default view is JSON-based but adding -view => 'TT', -template => 'my.tpl' to the hash would result in using `Template::Toolkit` instead. # NOTABLE FEATURES * **Mandatory validation** - parameters and cookies are always regex-checked. * **Forms** that validate a bunch of input parameters, additionally producing hashes of errors and raw values for resubmission. * **Path-based defaults** that can be overridden in route definition or by controller itself: neaf default => { -view => 'JS', version => $VERSION }, path => '/api'; * **Hooks** that may be executed at different stages: neaf pre_logic => sub { my $req = shift; die 403 unless $req->session->{is_admin}; }, path => '/admin'; * **Easy CLI debugging** - see `perl myapp.pl --help` See [examples](example/) for more. # INSTALLATION To install this module, run the following commands: perl Makefile.PL make make test make install # BUGS This package is still under heavy development (with a test coverage of about 80% though). Use [github](https://github.com/dallaylaen/perl-mvc-neaf/issues) or [CPAN RT](http://rt.cpan.org/NoAuth/ReportBug.html?Queue=MVC-Neaf) to report bugs and propose features. Bug reports, feature requests, and overall critique are welcome. # CONTRIBUTING TO THIS PROJECT See [STYLE.md](STYLE.md) for the style guide. See [CHECKLIST](CHECKLIST) if you plan to release a version. See [TODO](TODO) for a rough development plan. It changes rapidly though. # LICENSE AND COPYRIGHT Copyright 2016-2019 Konstantin S. Uvarin aka KHEDIN This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License. See http://dev.perl.org/licenses/ for more information.