【问题标题】:Integratiing Zend Framework and Geeklog集成 Zend 框架和 Geeklog
【发布时间】:2009-12-24 12:38:36
【问题描述】:

我们有一个 geeklog 托管网站在运行

http://bhaa.ie

我们最近在管理此页面的子域上设置了一个 zend 应用程序

http://bhaa.ie/members/public/index.php/event/list

我们希望更好的整合两个域,这样我们就可以调用这个url了

http://bhaa.ie/event/list

并让 zend 处理请求,而 geeklog 处理所有其他请求。

在我看来 - 我们有 2 个选项

1:更新 .htaccess 文件以过滤 geeklog 和 zend 实例之间的 url 请求。 或者 2:更新geeklog index.php 以包含基本的zend代码

我只是想知道有没有人有这样做的经验,或者可以推荐走哪条路?

【问题讨论】:

    标签: php zend-framework content-management-system


    【解决方案1】:

    如果您在基于 ZF 的应用程序中只有几个 URL(即 event/list 和其他几个),我会采用您的第一个解决方案:添加几个 RewriteRules到 geeklog 网站的 .htaccess 文件,将特定的 URL 重定向到基于 ZF 的应用程序。

    这样,您的两个应用程序保持完全分离:您没有任何代码混合在两个应用程序之间——就像您的第二个解决方案所暗示的那样。

    【讨论】:

      【解决方案2】:

      GeekLog 允许您启用外部页面,但您需要在默认 Zend ./public/index.php 中调用 geeklog 自定义方法。

      在下面的例子中,我不得不

      1. 在 set_include_path() 中包含 geeklog php 库
      2. 在调用 Zend 应用程序之前调用 EXP_externalAccess() 方法。

      '/public/index.php'的完整代码是

      <?php
      
      // Define path to application directory
      defined('APPLICATION_PATH')
          || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
      
      // Define application environment
      defined('APPLICATION_ENV')
          || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
      
      // Ensure library/ is on include_path
      set_include_path(implode(PATH_SEPARATOR, array(
          realpath(APPLICATION_PATH . '/../library'),
          realpath(APPLICATION_PATH),
          '/home/bhaa1/public_html/lib-common.php',
          get_include_path()
      )));
      
      /** Zend_Application */
      require_once '/home/bhaa1/public_html/lib-common.php';
      
      $page_name = substr($_SERVER['SCRIPT_NAME'], 1);
      
      if (!EXP_externalAccess($page_name)) {
          $display = COM_siteHeader('menu');
          $display .= COM_startBlock($LANG_EX00['access_denied']);
          $display .= '<div align="center"><b>' . 
                      $LANG_EX00['access_msg'] . 
                      '</b></div>';
          $display .= COM_endBlock();
          $display .= COM_siteFooter(yes);
          echo $display;
          exit;
      }
      
      require_once 'Zend/Application.php';  
      
      // Create application, bootstrap, and run
      $application = new Zend_Application(
          APPLICATION_ENV, 
          APPLICATION_PATH . '/configs/dashboard.ini'
      );
      
      $application->bootstrap()->run();
      ?>
      

      这样可以确保只有在用户拥有正确权限时才会调用页面。

      最后一步是更新我的 layout.phtml,让 geek-log 'menu' 和 'footer' 包装由 zend 应用程序呈现的 html。

      <?php echo COM_siteHeader('menu');?>
      
      // .. ZEND LAYOUT STUFF
      
      <?php echo COM_siteHeader('end');?>
      

      【讨论】:

        猜你喜欢
        • 2011-04-17
        • 2011-06-28
        • 1970-01-01
        • 2011-05-17
        • 2011-05-26
        • 2011-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多