Symfony 1.4 и глобальные переменные - PullRequest
0 голосов
/ 09 июня 2010

У меня есть очень старое php-приложение (1999), над которым работали последние десять лет. На данный момент приложение начинает показывать его возраст, поэтому я нахожусь в процессе перехода на «новую» среду, Symfony 1.4. Но так как приложение очень большое, я не могу сделать это сразу. Поэтому я планирую обернуть старое приложение в новое приложение Symfony и преобразовать функциональность в функциональность.

Первым шагом в этом переходе было появление старого приложения в новом приложении Symfony. Итак, я создал приложение "frontend", добавил модуль "legacy", сделал его домашней страницей по умолчанию и поместил все, что у меня было, в мой index.php (все страницы прошли через этот index.php) в Файл indexSuccess.php для indexAction. Я добавил код в «представление», потому что в нем также есть функции, и изменение этой настройки заняло бы у меня больше времени, чем я хотел бы потратить на старое приложение.

К сожалению, теперь у меня проблема с глобальными переменными. Позвольте мне привести вам пример (я бы никогда не сделал эту функцию регистра такой, но это так, поэтому, пожалуйста, посмотрите мимо этого.

$session = new ps_session;
$demo = "this is a demo variable";
$session->register('demo');

В ps_session у меня есть этот метод

public function register($var) {
    global $$var;
    $_SESSION [$var] = $$var;
}

Поэтому он должен поместить содержимое $ demo в сеансовую переменную с именем "demo". Умно правильно :) Во всяком случае, var_dumping показывает мне, что $$ var равен "null" и $ demo заполняется, если я var_dump до и после вызова функции. Точно такой же код без Symfony, и он возвращает правильное содержимое.

Что мне не хватает? Глобальный вызов распределен по всем областям этого огромного приложения, поэтому я действительно не хочу переключаться на что-то другое, поэтому я надеюсь на быстрое решение:)

Может быть уместно, весь код, кроме содержимого index.php, находится в папке frontend / lib / legacy /, индекс находится в файле frontend / modules / legacy / (если есть проблема с областью действия, которую я пропускаю)

Ответы [ 3 ]

0 голосов
/ 10 июня 2010

Я пошел, поместив весь старый сайт в web / legacy и перенаправив его из действия индекса по умолчанию в прежнюю папку.Большинство URL были сделаны mod_rewrite так легко исправить.Другие URL-адреса прошли через функцию, поэтому исправление было в порядке, и только некоторые из них были жестко закодированы.Чтобы сделать его полностью прозрачным, мне нужно всего лишь переделать домашнюю страницу, чтобы у меня не было видимого / legacy / в моем URL.Спасибо за помощь!

0 голосов
/ 10 июня 2010

Я согласен с greg0ire, что это проблема с тем, как sfPHPView включает indexSuccess.

Не могли бы вы просто require index.php в действии по умолчанию / index?

0 голосов
/ 09 июня 2010

Я думаю, что поскольку ваш файл indexSuccess.php включен в функцию (точнее, здесь: lib / vendor / symfony / lib / view / sfPHPView.class.php: 185), это не может работать, потому что $ демо больше не в глобальном масштабе. Я не вижу легкого обходного пути для этого ... Я думаю, вам следует создать устаревшую папку в / web и использовать маршрутизацию для перенаправления на нее, если URL-адрес соответствует чему-то еще не перенесенному.

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