Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasy PHP - ścieżka z JQUERY - $.post
Forum PHP.pl > Forum > XML, AJAX > AJAX
taes
witam wszystich,
postanowiłem przerobić jeden z moich projektów na standardy PSR-0, moduły i prawie wszystko działa. mam problem ze ścieżką klasy gdy wywołuję ją poprzez ajax-a,
ale po kolei....

mam następującą strukturę katalogów (nazwy katalogów i klas przykładowe):
.
- lib (katalog)
-- vendor (katalog)
--- module (katalog)
--- js (katalog)
---- jq.js (plik z definicją funkcji jquery)
---- php (katalog)
------ act.php (plik wywoływany z jquery)
---- Class.php (definicja mojej klasy)
- index.php

żeby było bardziej czytelne podam ścieżki do plików:
lib\vendor\module\js\jq.js
lib\vendor\module\php\act.php
lib\vendor\module\Class.php
index.php

plik index.php
w pliku dodany automatyczny autoloader następnie zarejestrowany - działa ok
  1. ...
  2. use \lib\vendor\module\Class;
  3. ....
  4. $cl = new Class();
  5.  

w tym pliku wszystkie wywołania metod klasy Class działają i nie ma z tym najmniejszego problemu.

plik Class.php
  1. namespace lib\vendor\module;
  2.  
  3. /*definicja klasy jest nieistotna tutaj */


plik act.php
  1. use lib\vendor\Class;
  2.  
  3. $cl = new Class();


plik jq.js
wywołuję tutaj metodę
$.post('lib\vendor\module\act.php', {}, function(data){
alert(data);
})

jeśli używam klasy Class z poziomu php jest ok,
po użyciu z poziomu ajax nie zna klasy Class - Fatal error: Class 'Class' not found in ....

Class nie jest moją znazwą klasy to jest tylko przykładowa nazwa. ma ktoś pomysł jak rozwiązać ten problem? bo mi pomysły pomału się kończą, a nie chciał bym używać tutaj pełnej ścieżki dostępu do klasy (problemy przenoszeniem na inną lokalizację)
viking
Spróbuj $.post('\lib\vendor\module\act.php', {}, function(data){
taes
niestety nie pomogło....
myślę że problem jest w tym, że ajax ma inna pozycję startową (ścieżkę)
nie działa również podanie w ścieżki do klasy poprzez ../Class.php w pliku act.php próbowałem już na chyba wszystkie znane mi sposoby dodawałem i rejestrowałem autoloadera... nic nie chce ze mną współpracować smile.gif
viking
Też tak sądzę. Wynika że prawidłowa ścieżka to lib/vendor/module/php/act.php
Myślałeś żeby to bardziej rozrzucić? Czyli żeby pliki js nie leżały w tym samym katalogu co wykonywalne PHP i zarazem przechodziło przez jakiś router napisany w PHP który by to bardziej kontrolował?
taes
lokalizacja pliku .js jest nieistotna.
gdy przez ajax wywołujemy plik który jest w tym samym katalogu co index.php klasę widzi poprawnie.

zastanawiam się teraz jak to zrobić, żeby jednak pliki dotyczące modułu były w katalogu tak jak wcześniej.....
w samym pliku w katalogu głównym wywoływać kod (metody, funkcje, include pliku) z katalogu modułu....

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.