PHP ООП, JQuery и MVC
Я относительно новичок в ООП PHP и, кажется, не могу вызывать функции в классе PHP через контроллер. Моя текущая настройка:
- index.php
- class.Class1.php
- functions.controller.php
- script.js
В index.php я включаю class.Class1.php, создаю новый объект Class и использую несколько его методов для вывода некоторого HTML. Я хочу использовать js-функции в script.js (вызываемые с помощью атрибута onclick ссылки) для взаимодействия с functions.controller.php, который, в свою очередь, будет вызывать методы в class.Class1.php и возвращать данные в script.js. кто в свою очередь выведет HTML на index.php.
Проблема в том, что я не знаю, как использовать методы для получения данных этого конкретного объекта. Когда я вызываю контроллер:
$.ajax({
type: 'GET',
url: 'functions/functions.controller.php',
data: 'r=' + 'h',
success: function(data){
$('.showing').html(data);
}
});
Я получаю 500 Внутренняя ошибка сервера:
[25-Oct-2011 01:24:06] Предупреждение PHP: include(classes/class.Class1.php) [function.include]: не удалось открыть поток: нет такого файла или каталога в /Users/Joey/Desktop/root/Test/functions/functions.controller.php в строке 7
[25-Oct-2011 01:24:06] Предупреждение PHP: include() [function.include]: Не удалось открыть 'classes/class.Class1.php' для включения (include_path='.:/Applications/MAMP/bin/php5.3/lib/php') в /Users/Joey/Desktop/root/Test/functions/functions.controller.php в строке 7
[25-Oct-2011 01:24:06] Неустранимая ошибка PHP: класс 'Class1' не найден в /Users/Joey/Desktop/root/Test/functions/functions.controller.php в строке 9
Это controller.php:
include('classes/class.Class1.php');
$in = new Class1;
echo $in->getData();
Кто-нибудь может пролить свет на это? Также приветствуются любые другие PHP OOP MVC с советами AJAX. Если понадобится больше моего текущего кода, я буду рад опубликовать.
2 ответа
Похоже, вы путаете ваши включенные пути.
Я предполагаю, что ваша файловая структура на самом деле
index.php
classes/class.Class1.php
functions/functions.controller.php
script.js
Включать class.Class1.php
от functions.controller.php
, вам нужно сначала пройти по каталогу, чтобы выйти из functions
каталог, например
// PHP >= 5.3
require_once __DIR__ . '/../classes/class.Class1.php';
// PHP < 5.3
require_once dirname(__FILE__) . '/../classes/class.Class1.php`;
PHP не может найти "classes/class.Class1.php", потому что его родитель ("/Users/Joey/Desktop/root/Test/") не входит в число путей, которые ищет PHP при включении файлов. Добавьте "/ Users / Joey / Desktop / root / Test /" к пути включения, либо в php.ini, либо в .htaccess (если PHP работает как модуль Apache), либо программно. Вы можете использовать корень документа в последнем случае. Например, если корневым документом является "/Users/Joey/Desktop/root/" (родительский элемент папки, добавляемой к пути поиска):
set_include_path(get_include_path() . PATH_SEPARATOR
. $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'Test');
Если вы поместите код, который обновляет путь включения, в файл инициализации, который находится в добавляемой папке, вы можете использовать:
set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__);