Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZendFramework] dwa pliki bootstrap, request ajaxowy i normalny
Thuunder
post
Post #1





Grupa: Zarejestrowani
Postów: 234
Pomógł: 1
Dołączył: 29.10.2004

Ostrzeżenie: (0%)
-----


Staram się zrobić 2 pliki z configiem tj. public/index.php oraz public/ajax.php - w tym drugim byłoby ładowanie tylko potrzebnych klas, aby skrócić czas wykonania jakieś akcji.
W jaki sposób wykryć, który plik config załadować w htaccessie ? Nie chciałbym się szczerze mówiąc odwoływać do pliku ajax.php podając jako parametry np. jakiś kontroler/akcję.
rolleyes.gif

Ten post edytował Thuunder 14.12.2011, 16:35:53


--------------------
najprostsze rzeczy są najmniej oczywiste
Go to the top of the page
+Quote Post
kabanek
post
Post #2





Grupa: Zarejestrowani
Postów: 35
Pomógł: 2
Dołączył: 25.06.2009
Skąd: Nowy Sącz

Ostrzeżenie: (0%)
-----


hmm dam Ci przykład z mojego projektu. Potrzebowałem uruchomić cron'a z aplikacji zenda. Zrobiłem to tak:

  1. <?php
  2.  
  3. chdir(dirname(__FILE__));
  4.  
  5. define('BASE_PATH', realpath(dirname(__FILE__) . '/'));
  6. define('APPLICATION_PATH', BASE_PATH . '/application');
  7.  
  8.  
  9. // Include path
  10. BASE_PATH . '/library'
  11. . PATH_SEPARATOR . get_include_path()
  12. );
  13.  
  14. $env = in_array('local', $argv) ? 'bkielbasa' : 'production';
  15.  
  16. // Define application environment
  17. defined('APPLICATION_ENV')
  18. || define('APPLICATION_ENV',
  19. (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
  20. : $env));
  21.  
  22. // Zend_Application
  23. require_once 'Zend/Application.php';
  24.  
  25. $application = new Zend_Application(
  26. APPLICATION_ENV,
  27. APPLICATION_PATH . '/configs/application.ini'
  28. );
  29.  
  30. $application->bootstrap();
  31.  
  32. $cron = new Gold_Cron;
  33.  
  34. $cron->execute();


gdy dasz

  1. $application->bootstrap()->run();


to wtedy uruchomi Ci "jako strona"

Zauważ, że ustawiłem własny ENV specjalnie dla crona, który się nazywa bkielbasa W application.ini wpisałem:

Kod
[bkielbasatests : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1


i w ten sposób mogę nadpisać całą konfigurację domyślnej aplikacji production.
Go to the top of the page
+Quote Post
Thuunder
post
Post #3





Grupa: Zarejestrowani
Postów: 234
Pomógł: 1
Dołączył: 29.10.2004

Ostrzeżenie: (0%)
-----


Na wstępie, dzięki za odpowiedź.
Może wyraziłem się mało precyzyjnie, ale chodzi mi o dwa różne pliki index.php z
  1. (...)
  2. $application = new Zend_Application(
  3. APPLICATION_ENV,
  4. APPLICATION_PATH . '/configs/application.ini'
  5. );
  6. $application->bootstrap();
  7. (...)


i drugi podobny do znalezionego na stronie

  1. error_reporting(E_ALL | E_STRICT);
  2. date_default_timezone_set(&#8216;America/Chicago’);
  3.  
  4. set_include_path(&#8216;.’ . PATH_SEPARATOR . ‘./library’ . PATH_SEPARATOR . get_include_path());
  5.  
  6. include &#8220;Zend/Loader.php”;
  7.  
  8. //setup controller
  9. Zend_Loader::loadClass(&#8216;Zend_Controller_Front’);
  10. $frontController = Zend_Controller_Front::getInstance();
  11. $frontController->throwExceptions(true);
  12. $frontController->setControllerDirectory(&#8216;./app/controllers’);
  13.  
  14. //run
  15. $frontController->dispatch();


Chodzi mi o to, żeby trochę szybciej działały zapytania ajaxowe, dlatego chciałbym do tych ajaxowych przygotować drugi plik, do którego mógłbym się odwoływać, a który nie ładowałby niepotrzebnych klas
tylko nie bardzo wiem jak.

Jeśli chodzi o uruchamianie skryptów z cron'a to kolejny temat, którym się chciałem zająć dlatego może się to przydać.


--------------------
najprostsze rzeczy są najmniej oczywiste
Go to the top of the page
+Quote Post
snapshot
post
Post #4





Grupa: Zarejestrowani
Postów: 96
Pomógł: 6
Dołączył: 22.08.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


W application.ini można ustawić ścieżkę, do bootstrapa. Możesz zatem zrobić sobie osobne środowisko i wybrać odpowiedni bootstrap:
Kod
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"


--------------------
ZF developer
Go to the top of the page
+Quote Post
Thuunder
post
Post #5





Grupa: Zarejestrowani
Postów: 234
Pomógł: 1
Dołączył: 29.10.2004

Ostrzeżenie: (0%)
-----


Ok, a jak w takim razie wykryć, że to jest zapytanie ajaxowe? Bazując na tablicy $_SERVER ?


--------------------
najprostsze rzeczy są najmniej oczywiste
Go to the top of the page
+Quote Post
phpion
post
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Możesz sprawdzić wartość HTTP_X_REQUESTED_WITH. Kod z Kohany 2.3.4:
  1. /**
  2. * Tests if the current request is an AJAX request by checking the X-Requested-With HTTP
  3. * request header that most popular JS frameworks now set for AJAX calls.
  4. *
  5. * @return boolean
  6. */
  7. public static function is_ajax()
  8. {
  9. return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest');
  10. }
Go to the top of the page
+Quote Post
by_ikar
post
Post #7





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Cytat(Thuunder @ 15.12.2011, 15:25:31 ) *
Ok, a jak w takim razie wykryć, że to jest zapytanie ajaxowe? Bazując na tablicy $_SERVER ?


zmienna $_SERVER['X-Requested-With'] powinna zawierać XMLHttpRequest. Czyli warunek powiedzmy powinien wyglądać tak:

  1. <?php
  2.  
  3. if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 'XMLHttpRequest' == $_SERVER['HTTP_X_REQUESTED_WITH'])
  4. {
  5. // ...
  6. }


EDIT: @phpion ubiegłeś mnie wink.gif

Ten post edytował by_ikar 15.12.2011, 15:48:33
Go to the top of the page
+Quote Post
kabanek
post
Post #8





Grupa: Zarejestrowani
Postów: 35
Pomógł: 2
Dołączył: 25.06.2009
Skąd: Nowy Sącz

Ostrzeżenie: (0%)
-----


można też inaczej - stworzyć kontroler na takie zapytania i do niego kierować zapytania
to również ustawisz w confingu

Kod
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"


ostatnia linijka smile.gif

przygotuj sobie kontroler/kontrolery i je wywołuj
wartość resources.frontController.controllerDirectory możesz nadpisywać tak jak napisałem w 1 poście do Ciebie.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 01:20