Right, well, I hope Sebastian will have a moment to reply at some point if it 
comes up so often and so many people were "in the same state of mind" :) Or he 
did already? If so - would be great if someone could provide a link. Thank you.

Cheers
Eugene

> On Apr 20, 2015, at 11:49 AM, Jan Henning Thorsen <[email protected] 
> <mailto:[email protected]>> wrote:
> 
> It's so funny how this questions comes up over and over again. I even have to 
> battle it myself from time to time, even when I know how stupid (Sorry for 
> using "stupid", but I think I'm allowed as it reflects back on myself), 
> limiting, hard to get around later, ... it would be to pass some $app-like 
> object around to lower level models.
> 
> Also, I probably know how your mind is set on your statement, and how you 
> probably just want to get confirmation instead of the answer I'm giving you. 
> Yes... Me and many before you have been in the same state of mind.
> 
> So... I was hoping I could help you with my Mojo::Pg->new() example above, 
> but it seems like I have failed.
> 
> I wish you the best of luck finding the right solution.
> 
> I also apologize if I'm stepping on yours or anyone else's toes. That is not 
> my intention.
> 
> 
> On Monday, April 20, 2015 at 10:31:45 AM UTC+2, Eugene Toropov wrote:
> Hi Jan,
> 
> Having to pass "db => shift->model->db” in every model helper doesn’t seem 
> like invisible way ;) It would be really invisible if you had “use DB” inside 
> a model package and then “my $db = $DB::dbh” :) but then you’d have to 
> somehow pass app->config to DB. Also if you kept something in app->config 
> that model needs - would you pass it as another parameter to every model you 
> had? What if then you had app->cache (redis/memcached) ? Another parameter to 
> pass to every model again? I feel it doesn’t seem good but can’t find any 
> other way in Mojo to do it so thought someone had found the solution...
> 
> Cheers
> Eugene
> 
>> On Apr 20, 2015, at 11:18 AM, Jan Henning Thorsen <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> I pass on $db to every instance of a model in MCT: 
>> https://github.com/mojoconf/MCT/blob/master/lib/MCT.pm#L33 
>> <https://github.com/mojoconf/MCT/blob/master/lib/MCT.pm#L33>
>> 
>> Just make a helper where the passing of $db (or any other common argument) 
>> is "invisible".
>> 
>> The nice thing is that the model will need to know less. It will then be 
>> easier to use for "other things" outside of your Mojo app. To flip the 
>> question around. Which version ofof the code below makes most sense?
>> 
>>   my $app = Mojolicious->new;
>>   $db = Mojo::Pg->new(app => $app);
>>   $db = Mojo::Pg->new(app => $app->config->{db}{dsn});
>> 
>> (I hope the version where $app is passed to new() looks weird...)
>> 
>> 
>> On Monday, April 20, 2015 at 9:17:27 AM UTC+2, Eugene Toropov wrote:
>> Hi Jan,
>> 
>> Thanks for your reply. Don’t you think that passing app->db to every model 
>> is not a good idea neither because model must know itself where data are and 
>> how to fetch it and pass to controller? Also it’s simply inconvenient to 
>> always have one (or even 2 - app->db and app->redis for example) arguments 
>> passed to every model, no?
>> 
>> Cheers
>> Eugene
>> 
>> On 20 Apr 2015, at 10:07, Jan Henning Thorsen <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>>> You don't. Passing $app or $c to a model is not a good idea. Reason for 
>>> this is that it makes it hard to reuse the models elsewhere. What you can 
>>> do, is passing data from $app when you construct your models, but I would 
>>> strongly advice against passing $app.
>>> 
>>> 
>>> On Friday, April 17, 2015 at 4:38:06 PM UTC+2, Eugene Toropov wrote:
>>> Greetings,
>>> 
>>> In the following example how will you make MyApp::Model::Users have access 
>>> to app object (which is basically $self) that is necessary to use app->db 
>>> and app->config?
>>> 
>>> http://mojolicio.us/perldoc/Mojolicious/Guides/Growing#WELL-STRUCTURED-APPLICATION
>>>  
>>> <http://mojolicio.us/perldoc/Mojolicious/Guides/Growing#WELL-STRUCTURED-APPLICATION>
>>> 
>>> package MyApp;
>>> use Mojo::Base 'Mojolicious';
>>> 
>>> use MyApp::Model::Users;
>>> 
>>> sub startup {
>>>   my $self = shift;
>>> 
>>>   $self->secrets(['Mojolicious rocks']);
>>>   $self->helper(users => sub { state $users = MyApp::Model::Users->new });
>>> 
>>>   my $r = $self->routes;
>>> 
>>>   $r->any('/' => sub {
>>>     my $c = shift;
>>> 
>>>     my $user = $c->param('user') || '';
>>>     my $pass = $c->param('pass') || '';
>>>     return $c->render unless $c->users->check($user, $pass);
>>> 
>>>     $c->session(user => $user);
>>>     $c->flash(message => 'Thanks for logging in.');
>>>     $c->redirect_to('protected');
>>>   } => 'index');
>>> 
>>>   my $logged_in = $r->under(sub {
>>>     my $c = shift;
>>>     return 1 if $c->session('user');
>>>     $c->redirect_to('index');
>>>     return undef;
>>>   });
>>>   $logged_in->get('/protected');
>>> 
>>>   $r->get('/logout' => sub {
>>>     my $c = shift;
>>>     $c->session(expires => 1);
>>>     $c->redirect_to('index');
>>>   });
>>> }
>>> 
>>> 1;
>>> Cheers
>>> Eugene
>>> 
>>> -- 
>>> You received this message because you are subscribed to the Google Groups 
>>> "Mojolicious" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to [email protected] 
>>> <mailto:[email protected]>.
>>> To post to this group, send email to [email protected] 
>>> <mailto:[email protected]>.
>>> Visit this group at http://groups.google.com/group/mojolicious 
>>> <http://groups.google.com/group/mojolicious>.
>>> For more options, visit https://groups.google.com/d/optout 
>>> <https://groups.google.com/d/optout>.
>> 
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Mojolicious" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] 
>> <mailto:[email protected]>.
>> To post to this group, send email to [email protected] 
>> <mailto:[email protected]>.
>> Visit this group at http://groups.google.com/group/mojolicious 
>> <http://groups.google.com/group/mojolicious>.
>> For more options, visit https://groups.google.com/d/optout 
>> <https://groups.google.com/d/optout>.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Mojolicious" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] 
> <mailto:[email protected]>.
> To post to this group, send email to [email protected] 
> <mailto:[email protected]>.
> Visit this group at http://groups.google.com/group/mojolicious 
> <http://groups.google.com/group/mojolicious>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.

Reply via email to