On Sat, 2015-05-02 at 12:50 +1000, Matthew Mallard wrote: > >> I’m getting a bit confused with plugins. I’m sure that I was able to > >> use the DBIC Plugin at one point from one of my plugins, but I can’t > >> seem to get it to work in 0.159002 or 0.160000. DBIC seems to be > >> okay outside of plugins. > > > > Firstly, there is change going on in the world of plugins, which I > > suspect will fix this, but I haven't read up on the full details myself: > > > > http://lists.preshweb.co.uk/pipermail/dancer-users/2015-April/004512.html > > > >> * how do I get DBIC to print the SQL it’s executing so I can double > >> check it’s what I’m expecting? > >> * am I doing something else wrong in the way I’m trying to use DBIC? > > > > This is a bit more tricky. With the current plugin architecture, > > "schema" is not available in the DSL when you call it from another > > plugin as you are doing. You can workaround this by capturing it during > > plugin initialisation, as long as you load the DBIC plugin before yours. > > See Plugin::Auth::Extensible::Provider::DBIC for an example: > > So do I create a sub in my custom plugin along these lines: > sub new { > my ($class, $dsl) = @_; > > # Grab a handle to the Plugin::DBIC schema > die "No schema method in app. Did you load DBIC::Plugin::DBIC before > My::Custom::Module?" > unless $dsl->can('schema'); > my $schema = $dsl->schema;
Yes, similar to that, but using on_plugin_import. See this example: https://github.com/PerlDancer/Dancer2-Plugin-Auth-Extensible/blob/de84a4a5baf5b56a83906355de075678c485fc51/lib/Dancer2/Plugin/Auth/Extensible.pm#L1158 > my $self = { > dsl_local => $dsl, > schema => $schema, > }; > return bless $self => $class; I don't think you need to bless your class, as it's already blessed. You just need to store the schema in a global in your module, a bit like $settings here: https://github.com/PerlDancer/Dancer2-Plugin-Auth-Extensible/blob/de84a4a5baf5b56a83906355de075678c485fc51/lib/Dancer2/Plugin/Auth/Extensible.pm#L13 > Then in my routes module I call plugins in this order: > use Dancer2::Plugin::DBIC > use My::Custom::Module Yes. > How does 'new' get called and what do I use to reference the schema in my > custom plugin. See above. > Let me know if there is some other background reading I should be doing > for how this work, To be honest, it's a dirty hack, so you won't find any documentation on it. You might be better waiting for the new plugin architecture if you can. Andy _______________________________________________ dancer-users mailing list [email protected] http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
