Bonjour,

Je souhaite développer un plugin, pour cela j'ai suivi le petit tuto officiel de cakephp et j'ai également pioché des informations dans la partie routing du site. J'ai l'impression que tout est bon, mais j'ai tout de même une erreur de route...
Voici les éléments de route que j'ai mis en place.

A la racine du site /config/routes.php

Je souhaite que mon site soit contenu dans le plugin 'ContactManager', je route donc la base de mon site vers celui-ci :

Router::scope('/', function ($routes) {
$routes->connect('/', ['plugin' => 'ContactManager', 'controller' => 'Contacts', 'action' => 'index']);
    $routes->fallbacks('DashedRoute');
});

Plugin::routes(); //si j'ai bien compris cela permet de charger les routes de tous les plugins

Dans /vendor/cakephp-plugins.php

J'ai "déclaré" mon nouveau plugin en ajoutant cette ligne :

$baseDir = dirname(dirname(__FILE__));
return [
    'plugins' => [
    ...
    'ContactManager' => $baseDir . '/plugins/ContactManager/',
    ...
    ]
];

Au coeur du plugin dans /plugins/ContactManager/config/routes.php

use Cake\Routing\Router;

Router::plugin('ContactManager',['path' => '/contact-manager'],
    function($routes){
        $routes->connect('/', ['controller' => 'Contacts', 'action' => 'index'], ['routeClass' => 'DashedRoute']);
        //$routes->fallbacks('DashedRoute');
    }
);

Au final voici mon erreur

Lorsque j'accède à mon site via l'URL : http://localhost/cake_module/
J'obtiens
error : ContactManager.ContactsController could not be found
error : Create the class ContactsController below in file : C:\wamp\www\cake_module/plugins/ContactManager/src\Controller\ContactsController.php

Cette classe existe et l'arborescence est exactement celle de mon plugin, mais je ne sais pas pourquoi les '\' deviennent des '/'...

Je cherche à développer un ensemble de plugins imbriquables pour construire un site internet.
Si vous avez un avis sur cette idée d'architecture ou si vous connaissez des projets open sources (sous cakephp 3) qui fonctionnent sur ce principe ça serait pour moi une très bonne source d'apprentissage.

J'espère vous avoir apporté assez d'informations, merci par avance =)

2 réponses


chris57
Auteur
Réponse acceptée

J'avais une erreur au niveau du fichier /composer.json

/composer.json

"autoload": {
        "psr-4": {
            "App\\": "src",
            "ContactManager\\": "./plugins/ContactManager/src"
        }
    },

J'ai également modifié la route du plugin

/plugins/ContactManager/config/routes.php

<?php
use Cake\Routing\Router;

Router::plugin('ContactManager', function($routes){
    $routes->connect('/:controller');
});

Maintenant mon site route vers mon plugin et je n'ai plus de soucis =)

Tu as bien fait attention au majuscule / minuscule et tu as mis dans un dossier src ? Les \ je ne vois rien de ton côté, c'est côté CakePHP, ils doivent parser les namespace sans remplacer par /, mais le problème n'a pas l'air de venir de là.