Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] dwa pliki bootstrap
Forum PHP.pl > Forum > PHP > Frameworki
Thuunder
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
kabanek
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.
Thuunder
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ć.
snapshot
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"
Thuunder
Ok, a jak w takim razie wykryć, że to jest zapytanie ajaxowe? Bazując na tablicy $_SERVER ?
phpion
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. }
by_ikar
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
kabanek
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.
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-2025 Invision Power Services, Inc.