Sunday, August 31, 2014

Re: 3.0.x - defaultConnectionName not working in Plugin

Okay, i think i'm finally on the right track.

As i noted, going to [host]/captchas was giving a Controller-not-found error. i realize now it's because the route connecting '/captchas' required an action to match... Oops. After trying the full URL that the Captcha validator uses, i got a JSON response, but it was a 500 error, the database was still trying to find the table kodiak.captchas. Changed TableRegistry::get('Captchas') to TableRegistry::get('Thook/Websites.Captchas') and got a JSON response i expected.

i know most of this is considered basic stuff, so i appreciate the patience in trying to help me. At least i'm trying to figure it out on my own while i wait for help, right? :)
-joe



On Saturday, 30 August 2014 12:28:50 UTC-4, Joe Theuerkauf wrote:
@José: Here's what i'm using that works on the Contact page where i need to load the Captchas model to grab a question:

Works:
Plugin::loadAll([
    [
        'Thook/Websites' => ['routes' => true]
    ]
]);

Also works:
Plugin::load('Thook/Websites');

Doesn't work:
Plugin::load('Thook/Websites', ['routes' => true]);

Results in ([...] shortening the path to relevant stuff):
Warning (2): include([...]/Plugin/Thook\Websites\config\routes.php): failed to open stream: No such file or directory [ROOT\vendor\cakephp\cakephp\src\Core\Plugin.php, line 346]
Warning (2): include() [function.include]: Failed opening '[...]/Plugin/Thook\Websites\config\routes.php' for inclusion (include_path='.;C:\WebServer\php5\pear\pear') [ROOT\vendor\cakephp\cakephp\src\Core\Plugin.php, line 346]

However, the file path it's trying to include IS valid (aside from directory separators).

---

@mark
In my primary routes file:

Router::scope('/', function(RouteBuilder $routes) {
    // Some routes linking to main App Controllers, working.

    // Per your response:
    $routes->connect('/captchas/:action/*', [
        'plugin' => 'Thook/Websites',
        'controller' => 'captchas' // Also tried 'Captchas', but the other routes' controller values are lower-case & working
    ]);

    $routes->connect(':controller', ['action' => 'index], ['routeClass' => 'InflectedRoute']);

    $routes->connect('/:controller/:action/*', [], ['routeClass' => 'InflectedRoute']);

    // This will be dropped for production. ;)
    $routes->connect('/', [
        'controller' => 'pages',
        'action'     => 'display',
        'home'
    ]);
});

Still receiving Controller not found when i go directly to [host]/captchas:

Missing Controller

Error: CaptchasController could not be found.

Error: Create the class CaptchasController below in file: App\Controller\CaptchasController.php

<?php  namespace App\Controller;    use App\Controller\AppController;    class CaptchasController extends AppController {    }  

Thanks a lot guys, for taking a look at this with me.
-joe


On Saturday, 30 August 2014 08:33:57 UTC-4, mark_story wrote:
If Router::plugin() isn't getting you the routes you want, you can combine scope() and connect () to create the exact routes you want. Just keep in mind that all the routing data that doesn't change should be in the defaults list. For example

$routes->connect('/captchas/:action/*', ['plugin' => 'Thook/Websites','controller' => 'Captchas']);

Would let you connect all the actions on the CaptchasController in your plugin.

-mark


--
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

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

No comments: