On 25 Feb 2011, at 01:56, John M. Dlugosz wrote:

I'm planning several web pages that will be the same except for the actual content. Rather than code the details in the TT template or prepare a list literally in the Controller, I'm thinking that this ought to go into a Model.

But, it can just be a Perl declaration.  Something like:
 my @data= (
    { foo=>'bar', items=>[qw/first second third/], bar=>'baz },
    # 7 more rows
    );

and add to that some subs to slice and dice the information so the TT doesn't have to; e.g. give a list of all the foo's.

How do I create a "static, literal" Model?
And, what would its form be in order to make it properly abstract, so it =could= be replaced with a standard DBIC or other model back- end without affecting the code?

package MyApp::Model::Foo;
use Moose;
use Method::Signatures::Simple;
use namespace::autoclean;

extends 'Catalyst::Model';

method data {
        return {
                    { foo=>'bar', items=>[qw/first second third/], bar=>'baz },
                        .......
        };
};

__PACKAGE__->meta->make_immutable;
1;

And you then call $c->model('Foo')->data;

The implementation of the 'data' method could then later be replaced by an attribute (i.e. has data => ( is => 'ro', isa => 'HashRef' );), and would then get the data from config, or something more complex (e.g. to get the data out of DBI, or another model, or whatever).

HTH
Cheers
t0m



_______________________________________________
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/

Reply via email to