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__);
Другие вопросы по тегам