2013-02-13 2 views
-2

J'essaie d'implémenter une fonctionnalité Ext.Direct réécrite dans Yii. Et tout fonctionne bien sauf que je ne peux pas obtenir la fonction doRpc pour fonctionner correctement, et c'est essentiel pour le bon fonctionnement de l'application, la fonction est définie dans le Sencha Ext.Direct Tutorial, bien que j'y ai apporté quelques modifications, voici donc mon code réécrit:Yii PHP Framework: Impossible de require_once à l'intérieur de Yii

composants/Ext_Router.php

class Ext_Router extends CApplicationComponent 
{ 
    public function doRpc($cdata) 
    { 
     $API = Yii::app()->ext_api->getApi(); 
     try { 
      if(!isset($API[$cdata->action])){ 
       throw new Exception('Call to undefined action: ' . $cdata->action); 
      } 

      $action = $cdata->action; 
      $a = $API[$action]; 

      Yii::app()->ext_router->doAroundCalls($a['before'], $cdata); 

      $method = $cdata->method; 
      $mdef = $a['methods'][$method]; 
      if(!$mdef){ 
       throw new Exception("Call to undefined method: $method on action $action"); 
      } 
      Yii::app()->ext_router->doAroundCalls($mdef['before'], $cdata); 

      $r = array(
       'type'=>'rpc', 
       'tid'=>$cdata->tid, 
       'action'=>$action, 
       'method'=>$method 
      ); 

      // TODO require_once always returns: No such file or directory 
      require_once("index.php?r=direct/classes/index&classaction=$action"); 

      $o = new $action(); 
      if (isset($mdef['len'])) { 
       $params = isset($cdata->data) && is_array($cdata->data) ? $cdata->data : array(); 
      } else { 
       $params = array($cdata->data); 
      } 

      $r['result'] = call_user_func_array(array($o, $method), $params); 

      Yii::app()->ext_router->doAroundCalls($mdef['after'], $cdata, $r); 
      Yii::app()->ext_router->doAroundCalls($a['after'], $cdata, $r); 
     } 
     catch(Exception $e){ 
      $r['type'] = 'exception'; 
      $r['message'] = $e->getMessage(); 
      $r['where'] = $e->getTraceAsString(); 
     } 
     return $r; 
    } 

    public function doAroundCalls(&$fns, &$cdata, &$returnData=null) 
    { 
     if(!$fns){ 
      return; 
     } 
     if(is_array($fns)){ 
      foreach($fns as $f){ 
       $f($cdata, $returnData); 
      } 
     }else{ 
      $fns($cdata, $returnData); 
     } 
    } 
} 

modules/DIRECT/régulateurs/ClassesController.php

class ClassesController extends Controller 
{ 
    public function actionIndex($classaction) 
    { 
     $this->render("$classaction"); 
    } 
} 

modules/directs/vues/classes/Temporary.php

class Temporary 
{ 
    protected $_result; 
    public $results; 

    public function getResults(stdClass $params) 
    { 
     $_result = Temporary::model()->findAllByAttributes(array('id'=>Yii::app()->session['id'])); 

     $results = array(); 

     if($_results != null) { 
      foreach($_result as $row) { 
       $results[] = $row; 
      } 
     } 

     return $results; 
    } 

    ... 
} 

Le problème:

require_once("index.php?r=direct/classes/index&classaction=$action"); 

Quelle est la meilleure façon de contourner ce problème? Comment puis-je 'analyser'/inclure/exiger ce fichier PHP?

(Ayez à l'esprit que je ne l'ai pas eu l'occasion de tester mon Temporary.php, parce que je suis tout simplement pas obtenu après l'erreur actuelle)

+2

Je ne suis pas sûr de ce que vous essayez de faire ici. quel est le résultat attendu? – Jon

+0

duplication possible de [PHP - inclure un fichier php et également envoyer des paramètres de requête] (http://stackoverflow.com/questions/1232097/php-include-a-php-file-and-also-send-query-parameters) ou [php inclure problème avec urls avec des options? view = tâche et autres fichier introuvable] (http://stackoverflow.com/questions/3592251/php-include-problem-with-urls-with-options-view-taskothers-file- not-found? rq = 1) – deceze

+0

J'essaie d'utiliser 'require_once' pour inclure le fichier spécifié dans l'appel. Pour ce cas, il est nommé 'Temporary', il deviendra donc' require_once ("index.php? R = direct/classes/index & classaction = Temporary"); '- mais pour les autres actions ce sera autre chose. Mais 'require_once' se traduit toujours par:' require_once (index.php? R = direct/classes/index & classaction = Temporaire): échec de l'ouverture du flux: aucun fichier ou répertoire de ce type '. – rnngau

Répondre

2

Utilisation Yii's import:

<?php 
Yii::import('application.modules.direct.views.classes.Temporary'); 
+0

Juste ce que je cherchais. Merci! – rnngau

Questions connexes