2013-12-04 4 views
1

Я перенаправляю все http-запрос в файл index.php, router.php и другие файлы configure, вызываемые index.php, у меня есть маршрутизатор, который будет искать обработчик, если файл существует, но мне интересно, как я могу получить доступ к переменной обработчика в моем контроллере.Как сделать переменную доступной для других включенных файлов

Вот мой index.php, будет включать в себя все конфигурационный файл, как дб и сайт установки

index.php

require_once ('include/config.inc.php'); 
require_once ('include/mysql.inc.php'); 
require_once ('include/shared_function.inc.php'); 
require_once ('include/router.inc.php'); 

Вот мой маршрутизатор будет проверять для обработчиков если существует.

router.php

front_controller(){ 

    if(file_exists('handlers/login-handler.php')){ 
     include_once('handlers/login-handler.php'); 
    } 

    include_once('login.php'); 
} 
front_controller(); 

Вот файл я обрабатывать запрос, как правило, я буду держать массив ошибок для отображения обратно в виде

обработчики/войти в обработчик .php

//initialise variable to keep error 
$errors=array(); 

if(request==post){ 
... 
//validate post data 
... 
} 

после вызова обработчиков, вот мой контроллер, который отобразит форму или результат.

login.php

//here comes the error , undefined variable 
print_r($errors); 

Пожалуйста, предложите мне хороший способ преодолеть эту проблему ...

+0

Попробуйте объявить $ errors = array(); в router.php до if (file_exists ...). Есть функция вокруг кода? –

+0

@MarcelBalzer Спасибо за ваш ответ, весь код находится внутри функции call front_controller() –

+0

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

ответ

2

Как насчет создания абстрактного класса ошибок с помощью общедоступных методов «add_error» и «get_errors» ?. Пока класс импортируется в ваш код, вы можете свободно его получить. Он может идти, как:

abstract class Error_handler 
{ 
private static $ERRORS=array(); 
public static function add_error($error) {self::$ERRORS[]=$error;} 
public static function &get_errors() {return self::$ERRORS;} 
} 

Ошибки будут содержаться внутри статического массива $ ОШИБКИ и никогда бы не столкнуться с любым другим именем в коде.

+0

Я думаю, что абстрактная работа намного лучше, потому что я использую классы autoload тоже ... Спасибо, любые профи, если я использую это? –

+1

Плюсы ... Ну, для начала, он относительно инкапсулирован, и вы можете повторно использовать и дополнять по своему усмотрению, пока вы предоставляете тот же публичный интерфейс. Вы можете, например, легко включать ведение журнала в файлы или базы данных, уведомлять себя через почту или текстовое сообщение, если что-то пойдет не так, и даже сохранить его как объекты (с описанием, строкой или файлом) с минимальными усилиями. Против ?. Ну, есть один единственный массив ошибок, хотя вы всегда можете подклассировать или переопределить. Хотя я бы лично избегал глобального, как чума, вы можете считать это своего рода «защищенным» глобальным массивом. –

1

Использование ниже кода перед печатью переменной.

global $errors; 
+0

У него есть недостатки? Я использую это в большом приложении, повлияет ли он на другую переменную, такую ​​как переменная класса, которая также назвала $ errors? –

+0

Это затронет всюду. Я имею в виду и другие файлы, если вы включаете другие файлы на одной странице. –

+1

См. Этот ответ за недостатки использования 'global' - http://stackoverflow.com/a/12446305/1209020 – Ryan

Смежные вопросы