Matt S Trout wrote:
Ian Docherty wrote:
My problem is finding a clean way of getting these constraints out of the Model and into the View so that I can generate meaningful error messages without hard-coding them in the templates. By 'clean' I mean not having to code the Controller to act as the middle-man and just pass them from the Model to the View.

Perhaps I am expecting too much.

No, I understand entirely, and you aren't expecting too much at all - except perhaps any expectation that this would already be fully implemented :)

We're doing this in Reaction using Moose to provide an introspectable metamodel so the update action class reflects its constraints off the model and then the form reflects its field types off the update action and the fields just have the constraints "already there" when they're doing validation. It's been hard work and there's a lot of hard work still to come but so far it works bloody well.

How the hell do you find the time to work on Catalyst and on Reaction at the same time!!!

One thing occurs to me. What I want to do is to get parameters from the Model (or the Business layer) into the View via the stash. So for a User object I want be able to do something like.

<td align="left" class="error">Username must be between [% schema.user.username.min %] and [% schema.user.username.max %] characters</td>

The only problem now is how to get this information from the DBIC data in a DRY manner.

My model namespace is not in Catalyst as in:-

MyApp::Model::DBIC::User

but is in
MyApp::Schema::User

so that I can use it outside my Catalyst application (for example in cron jobs) so I don't have a mechanism to do something like.

$c->forward->('MyApp::Model::DBIC::User/constraints')

Where 'constraints' would populate the stash with all the constraints for the User table.

The only option I can see is to do a call everywhere that I need constraints as follows.

$c->stash->{schema}{user} = MyApp::Model::DBIC::User::Constraints();

And in there do the following.

sub Constraints {
   return {
      username => {
         min   => 0,
         max   => 16,
      },
      firstname => {
         min   => 0,
         max   => 32,
      },
   };
}

Carl Franks has proposed a method using 'columns_info_for' which I will have to give some more thought to and this may remove my worry that by doing the above I am not doing it in a DRY manner.



_______________________________________________
List: [email protected]
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/

Reply via email to