Доступ к классу sfConfig в apps / appname / lib

#php #symfony1

#php #symfony1

Вопрос:

У меня есть приложение symfony 1.4 с некоторыми классами для подключения к веб-службе SOAP, хранящейся в apps / appname / lib. Когда я пытаюсь получить доступ к sfConfig классу, чтобы получить некоторые переменные, которые я установил app.yml , выдается ошибка, поскольку приложение не распознает sfConfig::get('app_myvar') как метод, вызываемый в классе.

Как мне сделать sfConfig класс доступным для классов в моем каталоге apps / appname / lib?

Это ошибка, которую я получаю

 Parse error: syntax error, unexpected '(', expecting ',' or ';' in /Users/my/Sites/mySite/apps/frontend/lib/mySOAP.class.php on line 9
  

И вот вершина моего класса:

 class mySOAP extends SoapClient  {
  protected $client = null;
  protected $soapUrl = sfConfig::get('app_my_url');
  protected $options = array(
    'trace'             => 1,
    'exceptions'        => 1,
    'soap_version'      => SOAP_1_2,
    //'encoding'            => 'ISO-8859-1',
    'features'          => SOAP_SINGLE_ELEMENT_ARRAYS
  

Строка 9

 protected $soapUrl = sfConfig::get('app_my_url');
  

Ответ №1:

sfConfig Класс загружается автоматически при загрузке стека Symfony. Таким образом, либо ваш запуск через index.php (или любой другой контроллер интерфейса), либо CLI, у вас должен быть доступ к sfConfig .

Итак, мое лучшее предположение заключается в том, что вы либо не успешно настроили стек Symfony (хотя это должно вызвать другие ошибки на более ранней стадии), либо пытаетесь получить доступ к app.yml скрипту извне Symfony ? В последнем случае вы можете либо загрузить Symfony, либо включить sfYaml анализатор и проанализировать app.yml его самостоятельно.

Комментарии:

1. Трассировка стека в моем приложении показывает, что я загружаю стек Symfony. Я думаю, мне нужно найти способ добавить интерфейс в объявление моего класса, чтобы он имел доступ к классу sfConfig. Прямо сейчас мой пользовательский класс просто расширяет стандартный класс php SoapClient

2. sfConfig — это (один из немногих) глобальных классов в Symfony. После загрузки вы должны иметь к нему доступ. Не могли бы вы расширить свой вопрос некоторыми примерами кода (функцией, в которой вы ее вызываете) и точным сообщением об ошибке?

3. Я только что опубликовал свое сообщение об ошибке, вернувшись к работе над этим проектом через месяц. В любом случае, судя по ошибке, я надеюсь, что это что-то глупое, что я делаю 🙂

4. Во-первых: вы не должны (не можете) присваивать значение для $soapUrl непосредственно после его объявления. Вы должны назначить его в конструкторе. Второе: можете ли вы указать, какая строка является строкой 9? Ошибка, которую вы получаете, является «синтаксической ошибкой», что означает, что у вас ошибка в самом коде, а не в «логике».

5. Я отредактировал свой ответ. Так что это определенно как-то связано с назначением $soapURL права после его объявления. Возможно, мне следует назначить его где-нибудь еще?