Как я могу обернуть устаревший код PHP в Kohana? - PullRequest
3 голосов
/ 12 июля 2011

У меня есть большое количество унаследованного кода, написанного на PHP, который не был написан на какой-либо конкретной среде, скорее это в основном стиль старой школы (т.е. встроенный) PHP.Тем не менее, большая часть моего нового кода написана на платформе Kohana 3.1.X.Хотя Kohana допускает сосуществование как унаследованного кода, так и файлов Kohana на одном и том же веб-сайте, я хотел бы теперь обернуть каждый файл унаследованного кода в виде представления и в полной мере использовать преимущества шаблона проектирования MVC Kohana и перезаписи URL.Тем не менее, я сталкиваюсь с проблемами из-за того, что мой унаследованный код не может получить доступ к глобальным переменным, определенным из самого представления (то есть унаследованного кода), и не в состоянии использовать встроенные функции, которые пытаются увидеть эти глобальные переменные через оператор глобальной области видимости.Например:

application / views / legacy.php

$gvar = 5;

function getadminsettings(){
    global $gvar;
    echo $gvar;
}

application / classes / controller / myctrl.php

...
public function action_legacy() {
    // call legacy.php as a view via View::factory()
}
...

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

Я смотрел на В PHP, как я могу обернуть процедурный код в классе? , но этот пост не работает в этом случае, потому что я имею дело скаркас Kohana.

Обновление:

Кажется, что Kohana использует выходной буфер, и поэтому он не может получить доступ к таким глобальным переменным в устаревших файлах.Кому-нибудь удалось получить представление в Kohana 3.2 для доступа к глобальным переменным?

Ответы [ 2 ]

0 голосов
/ 22 октября 2011

Я никогда не пробовал этого, но вы можете попробовать поместить код в контроллер, а не в представление.

Предполагая, что здесь вы используете Controller_Template для вашего контроллера

public function action_legacy() {
    $this->auto_render = FALSE;

    include('legacy file'); 
    // you could cut and paste the legacy code here, but it might get to messy
}
0 голосов
/ 13 июля 2011

Перемещение унаследованного приложения в инфраструктуру в стиле MVC не позволяет использовать метод «вырезать и вставить».В любых приложениях, кроме самых простых, потребуется много времени и усилий для рефакторинга кода, чтобы сделать его MVC-совместимым.

Если ваше унаследованное приложение работает и не находится в стадии регулярной разработки, вы мало выиграетепереключившись на MVC.Шаблон MVC часто приводит к накладным расходам и в первую очередь приносит пользу разработчикам, а не конечным пользователям.

Однако, если ваше приложение требует регулярного обслуживания, вам придется затратить необходимые усилия для реорганизации устаревшего кода, чтобы соответствоватьновый метод.

...