call_user_func замена имени файла класса случайной строкой - PullRequest
0 голосов
/ 13 марта 2012

У меня странная проблема при вызове call_user_func. Имя класса, который я передаю, почему-то заменяет его имя случайной строкой. Самое смешное, что все это прекрасно работает в моем локальном развертывании, а затем ломается, когда я перемещаю его вживую (и локальный, и живой работают под управлением PHP5.3)

call_user_func () пытается вызвать функцию из другого класса контроллера и возвращает ошибку, когда имя класса заменяется случайной строкой.

ОБНОВЛЕНО

Звонок выглядит так:

class ApiController extends Controller
{
  public function actionView()
  {
    $this->resource_class = 'site\frontend\controllers\api\v1'.'\\'.ucfirst($_GET['resource']).'Controller';
    if(class_exists($this->resource_class))
       call_user_func(array($this->resource_class, 'view'), $_GET);
  }
}

На этом этапе $ this-> resource_class равен:

site\frontend\controllers\api\v1\OffersController

Целевой класс (site / frontend / controllers / api / v1 / OffersController.php) выглядит следующим образом:

namespace site\frontend\controllers\api\v1;
class OffersController extends \ApiController
{
  public function view($params)
  { 
     // code...
  }
}

и я получаю ошибку:

include(/home/username/public_html/site/frontend/controllers/api/v1/evm9pfgpg9u0k9pk.php): failed to open stream: No such file or directory

По какой-то странной причине OffersController скремблируется в evm9pfgpg9u0k9pk

Класс OffersController существует в пространстве имен site \ frontend \ controllers \ api \ v1, и в нем доступен метод public view (). Как я уже упоминал, он работает на моем локальном развертывании.

Кто-нибудь видел это раньше и имел представление о том, что может быть причиной? Спасибо за вашу помощь! :)

Кто-нибудь имел это раньше?

1 Ответ

0 голосов
/ 14 марта 2012

По какой-то причудливой причине OffersController скремблируется в evm9pfgpg9u0k9pk

Это не точно .Фактически имя класса OffersController отображается на имя файла :

/ ... /public_html/site/frontend/controllers/api/v1/evm9pfgpg9u0k9pk.php

Имя файла и имя класса часто связаны, но это две разные вещи.Если вы хотите выяснить, почему имя класса отображается на это имя файла, вам также необходимо поделиться исходным кодом вашего автозагрузчика.Вызов class_exists вызовет ваш автозагрузчик, если класс еще не существует.

Кроме того, call_user_func не связано с ошибкойвы получаете, потому что вы звоните class_exists перед ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...