开放的编程资料库

当前位置:我爱分享网 > Python教程 > 正文

Cgiapp 路线图

有一些人与我联系表示对Cgiapp感兴趣,而且我注意到我设置的freshmeat项目有很多订阅者。此外,我们在国家园艺协会广泛使用该库来开发我们的新闻网站(当前网站混合使用ASP和Tango,还有几个使用PHP的较新应用程序)。我也一直在监视CGI::Application邮件列表。作为所有这些活动的结果,我决定我需要为Cgiapp制定路线图。

目前,计划中的更改包括:

  • 版本1.x系列:

    • stripslashes添加Smarty注册(Smarty“功能”callwillbesslashes).
    • param()错误修复:目前,调用param()时不带任何参数simplygives您使用该方法注册的参数列表,但不是它们的值;这将被修复。
    • error_mode()方法。CGI::ApplicationML提出并实现了error_mode()方法的想法,以向对象注册一个error_mode(类似于运行模式())。虽然不是必需的,但它会提供用于错误处理的标准内置挂钩。
    • $PATH_INFO遍历。同样,在CGI::AppML上,请求内置支持使用$PATH_INFO来确定运行模式。基本上,您将传递一个参数指示$PATH_INFO字符串中的哪个位置保存运行模式。
    • DocBook教程。我觉得类级别的文档中提供了太多信息,需要编写使用教程。由于我使用PhpDoc进行文档编写并以PEAR为目标,因此将教程移至DocBook是合乎逻辑的步骤。
  • Version2.x系列:

    是的,一个Cgiapp2在未来。有一些更改需要(a)PHP5或(b)API更改。为了与PEAR准则保持一致,我将重命名模块Cgiapp2,以免破坏为Cgiapp设计的应用程序。

    预期的更改包括:

    • 继承自PEAR。这将允许一些内置的错误处理,等等。我怀疑这将与error_mode()配合使用,并且可能还会弃用croak()carp()

    • tmpl_path()load_tmpl()的更改。在perl版本中,您将使用load_tmpl()实例化一个模板,将变量分配给它,然后对其执行fetch()。所以,这个:

      $this->tmpl_assign('var1', 'val1');
      $body = $this->load_tmpl('template.html');
      

      变成这个:

      $tmpl = $this->load_tmpl();
      $tmpl->assign('var1', 'val1');
      $body = $tmpl->fetch('template.html');
      

      或者

      $tmpl = $this->load_tmpl('template.html');
      $tmpl->assign('var1', 'val1');
      $body = $tmpl->fetch();
      

      (两个示例都假定使用Smarty。)出于以下几个原因,我想恢复到此行为:

      • perl的可移植性。这是PHP和perlversions差异很大的一个领域;采用perl方式使两种语言之间的类移植更简单。

      • 解耦。当前的模板方法集创建一个对象作为应用程序对象的参数——这很好,除非模板对象实例化器返回不同类型的对象。

        缺点:

        • Smarty可以使用同一个对象来填充多个模板,当前的方法就是利用了这一点。通过将模板对象本地分配给每个方法,这可能会丢失。但是……一个简单的解决方法是让load_tmpl()创建对象并将其存储为一个参数;后续调用将返回相同的对象引用。如果load_tmpl()假定模板名称将被传递,则困难在于。然而,即使在CGI::App中,您也可以决定一个模板引擎并为该引擎进行设计;从来没有假设模板引擎应该是可交换的。

        • 现有的Cgiapp1应用程序需要重写。

    • PluginArchitecture:CGI::AppML产生了一个::Plugin使用通用插件架构的命名空间。它在perl中的完成方式是通过一些神奇的命名空间和导出例程……值得注意的是,这两者在PHP中都没有。

      但是,如果我使用PHP5,我想我可能知道一个解决方法:themagic__call()重载方法。

      我的想法是让插件类注册方法,基于Cgiapp的类应该可以访问$_GLOBALS数组。然后,__call()方法将检查已注册方法的键;如果发现一个匹配请求的方法,则调用该方法(使用call_user_func()),并将基于Cgiapp的对象引用作为第一个引用。瞧!即时插件!

      为什么要这样做?然后可以创建“标准”插件库,例如:

      • 表单验证插件
      • 替代模板引擎作为插件(而不是覆盖tmpl_*方法)
      • 授权插件

      由于“导出”的方法可以访问Cgiapp对象,它们甚至可以向其注册对象或参数.

如果您对路线图有任何要求或意见,请随时与我联系。

未经允许不得转载:我爱分享网 » Cgiapp 路线图

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏