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)
Je ne suis pas sûr de ce que vous essayez de faire ici. quel est le résultat attendu? – Jon
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
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