2010-11-01 49 views
1

Je souhaite appeler une action du fichier du contrôleur à partir d'un fichier .ctp dans cakephp. c'est possible? oui, que comment? aidez s'il vous plaît. par exemple J'ai une action dans le contrôleur. users_controller.phpAction du contrôleur d'appel du fichier ctp

<?php 
class UsersController extends AppController { 

    function get_category() { 
     .... 
    } 

} 
?> 

Je veux l'appeler à partir du fichier /question/index.ctp.

+4

Pourquoi voulez-vous faire cela? Il est en violation des bonnes pratiques MVC, et pour moi, il crie "quelque chose n'a pas été configuré correctement". –

+0

+1 ouais, mais .... – Leo

Répondre

2

La façon de faire est:

$this->requestAction(array('controller' => 'users', 'action' => 'get_category')); 

La création de l'URL the CakePHP way augmentera les performances (il ne sera pas nécessaire d'utiliser le routeur). Aussi fonctionnera toujours, tout en le faisant comme: "users/get_category" pourrait causer des problèmes quand vous n'êtes pas dans la page d'index.

Il devrait seulement être employé dans des éléments (avec le cache particulièrement), si le cas est différent - reefer à ce que Travis Leleu a écrit dans son commentaire.

+0

Mais ça ne génère pas de sortie du fichier get_category.ctp. Je veux aussi afficher sa sortie. – gautamlakum

1

vous pouvez l'appeler comme $ this-> requestAction ('contrôleur' ​​=> 'utilisateurs', 'action' => 'get_category')

+0

correction $ this-> requestAction ('users/get_category') – mentes

+1

les deux fonctionneraient :) –

+0

autant que je sais $ this-> requestAction ('controller' => 'users' , 'action' => 'get_category') celui-ci devrait être $ this-> requestAction (array ('controller' => 'users', 'action' => 'get_category')) Je n'ai pas essayé autrement – mentes

2

Il convient de noter que vous ne devez PAS vous fier à requestAction comme pratique courante. requestAction est un appel extrêmement lourd et ne doit être utilisé que si vous ne pouvez pas organiser votre code d'une autre manière.

Idéalement, vous enverriez les données dont vous avez besoin depuis votre action de contrôleur à la vue plutôt que de les rappeler à votre contrôleur.

function my_action() { 
    ... 
    $this->set('category', $this->getCategory()); 
}