2010-09-20 3 views
1

J'ai beaucoup cherché sur le web mais je n'ai pas trouvé de solution spécifique à cela.
Dans CakePHP 1.3, si vous aviez un contrôleur à l'intérieur d'un plugin, vous pouviez accéder via "<plugin>/<action>", et il appelait le contrôleur "par défaut". Mais en 1.3, selon ce:CakePHP 1.3 Plugin Raccourci Route

http://cakeqs.org/eng/questions/view/setting_up_magic_routes_for_plugins_in_cakephp_1_3

Il a été enlevé et que l'action « index » dans le contrôleur de plug-in par défaut est accessible ainsi. J'ai pensé à ajouter du code supplémentaire dans mon fichier routes.php, et faire une boucle sur tous les plugins dans mon application, en faisant de telles routes pour chaque action dans les contrôleurs nommés d'après le plugin, mais il ne semble pas que ce soit le bonne chose à faire ...

d'autres suggestions pour que cela fonctionne dans 1.3? ou au moins une documentation de code très spécifique de ce changement particulier? Je l'ai déjà lu quelque chose dans le annoucement 1.3.0 RC4, mais il était pas assez clair ..

grâce

Répondre

0

un plugin nommé supposant « test », vous pourriez faire quelque chose comme cela dans app/plugins /test/controller/test_controller.php:

<?php 
class TestController 
    extends AppController 
{ 
    public function index() 
    { 
     // Is there any additional args passed to us? 
     if(count($this->passedArgs) > 0) 
     { 
      // Is this a request for one of our actions? 
      $actualAction = $this->passedArgs[0]; 
      if(is_callable(array($this, $actualAction))) 
      { 
       // Yup. Do it. 
       return call_user_func_array(array($this, $actualAction), array_slice($this->passedArgs, 1)); 
      } 
     } 

     // Default functionality here. 
     die("Index of plugin requested."); 
    } 

    public function another($param1, $param2) 
    { 
     die("{$param1}, {$param2}"); 
    } 
} 

Vous devez également ajouter ce qui suit à app/config/routes.php:

Router::connect("/test/*", array("plugin" => "test", "controller" => "test")); 

Avec ce fait, une demande/test/autre/un/deux w mal rendre correctement "un, deux" dans le navigateur, et une demande à/test affichera "Index du plugin demandé."

Je pense que ce n'est pas une mauvaise façon de procéder, un minimum d'agitation du côté du plugin consommateur, seulement un peu de fluff dans le code du plugin.