Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
定制php模板引擎:我终于走上正轨了吗?_Php_Xml_Template Engine_Conceptual - Fatal编程技术网

定制php模板引擎:我终于走上正轨了吗?

定制php模板引擎:我终于走上正轨了吗?,php,xml,template-engine,conceptual,Php,Xml,Template Engine,Conceptual,因为我总是迟到回答问题,而我实际上知道答案,所以我想我应该试着自己问一个问题 我已经在php中对定制模板引擎进行了很多次完整的重写,时间太长了,我想我应该征求意见 简言之,这是我迄今为止实施的最重要的部分: 任何http请求都将路由到handler.php 根据请求的URL实例化控制器并调用该控制器上的方法。 控制器方法必须返回与IView兼容的类实例IView定义渲染方法 模板引擎对以“服务器端”sprintf“//%s:[@runat=server]”,$namespaceprefix结尾的

因为我总是迟到回答问题,而我实际上知道答案,所以我想我应该试着自己问一个问题

我已经在php中对定制模板引擎进行了很多次完整的重写,时间太长了,我想我应该征求意见

简言之,这是我迄今为止实施的最重要的部分:

任何http请求都将路由到handler.php 根据请求的URL实例化控制器并调用该控制器上的方法。 控制器方法必须返回与IView兼容的类实例IView定义渲染方法 模板引擎对以“服务器端”sprintf“//%s:[@runat=server]”,$namespaceprefix结尾的每个命名空间执行一些xpath 对于找到的每个标记,它都会查找由$tag.localName标识的php类,并实例化一个并将其附加到原始模板。 连接后,原始模板节点将被馈送到“ServerTag”,以便它可以正确初始化 将完全完整的IView兼容实例分配给控制器方法中的临时变量。 控制器请求将数据从一个模型类推送到视图中,该视图进行了一些漂亮的XPathDOM替换。 控制器将完全填充的视图返回给处理程序,处理程序将呈现该视图。 我的模板是基于xml的。一个简单的模板当前看起来像:

<html xmlns="http://www.w3.org/1999/xhtml" 
  xmlns:red="http://www.theredhead.nl/serverside">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Title will be filed by the View depending on the Controller</title>
    <link rel="stylesheet" type="text/css" href="/Stylesheet/Get/Main/" />
</head>
<body>
    <!-- the entire body may be reset by the view using it, using XPath and DOM functions -->
    <!-- Usually the PageHeader and PageFooter would be put back after clearing the body  -->
    <div id="PageHeader">
        <img src="/Image/Get/theredhead_dot_nl.png" alt="Site Logo" />
    </div>
    <h1>www.theredhead.nl :: Test Template</h1>
    <p>
        Lorum ipsum dolar sit amet. blah blah blah yackadee schmackadee.
    </p>

    <div id="PageFooter">
        Built by
        <br />
        <red:UserProfileLink runat="server" Username="kris" />
    </div>
</body>
</html>
当前,此输出包括破损压痕:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:red="http://www.theredhead.nl/serverside">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>Welcome to my site</title>
    <link rel="stylesheet" type="text/css" href="/Stylesheet/Get/Main/"/>
    <link rel="stylesheet" type="text/css" href="/Stylesheet/Get/Custom/"/>
    <link rel="stylesheet" type="text/css" href="/Stylesheet/Get/Profile/"/>
</head>
<body>
    <!-- the entire body may be reset by the view using it, using XPath and DOM functions -->
    <!-- Usually the PageHeader and PageFooter would be put back after clearing the body  -->
    <div id="PageHeader">
        <img src="/Image/Get/theredhead_dot_nl.png" alt="Site Logo"/>
    </div>
    <h1>www.theredhead.nl :: ModelViewController</h1>
    <p>
        Lorum ipsum dolar sit amet. blah blah blah yackadee schmackadee.
    </p>

    <div id="PageFooter">
        Built by
        <br/>
        <div><div xmlns:profile="http://www.theredhead.nl/profile" class="ProfileBadge" style="font-size : .8em;">
<a style="text-decoration : none; border: none;" href="/Profile/View/kris">
    <img style="float : left;" src="http://www.gravatar.com/avatar/5beeab66d6fe021cbd4daa041330cc86?d=identicon&amp;s=32&amp;r=pg" alt="Gravatar"/>
    &#xA0;Kris
</a>
<br/>
<small>
&#xA0;Rep:&#xA0;1
</small>
</div></div>
    </div>
</body>
</html>
这里我只提到了冰山一角,是的,一旦我对功能满意,我将从输出中剥离未使用的xmlns属性 在我的mvc和核心框架中,目前只有200多个类 我知道有一些现有的解决方案可以做类似的事情,但我想建立自己的解决方案。 所以最大的问题是:你对必备功能有什么意见吗


另外,如果有人对完整的源代码感兴趣,请留下评论,当我达到合理的开发人员可用性水平时,我将在我的网站上提供它。

为什么不直接使用PHP作为模板系统呢。PHP是模板系统

在HTML模板中转储有什么问题?可以使用foreach循环等。 只需确保在无法访问任何不需要的变量的范围内运行它


自从我做Java/Struts噩梦以来,我对这种过于复杂的模板系统有一种根深蒂固的憎恨。您必须深入研究名称空间、xpath、自定义名称空间以及所有这些东西,然后才能更改所需的一项内容

为什么不直接使用PHP作为模板系统呢。PHP是模板系统

在HTML模板中转储有什么问题?可以使用foreach循环等。 只需确保在无法访问任何不需要的变量的范围内运行它


自从我做Java/Struts噩梦以来,我对这种过于复杂的模板系统有一种根深蒂固的憎恨。您必须深入研究名称空间、xpath、自定义名称空间以及所有这些东西,然后才能更改所需的一项内容

这里有一篇关于模板引擎的文章:


你做错了。

这里有一篇关于模板引擎的文章:


你做错了。

在我看来,只有菲尔·雷夫真正阅读并理解了这个问题及其意图

那些声称php是模板引擎的人忽略了太多的事实,他们忽视了坚实的框架非常重要的现实世界

因此,到目前为止,这些点必须具有尚未实现的功能:

名单。我将在类似的控件中处理这些 验证。将通过验证控制进行处理。正则表达式、比较等。 输出是强制有效的XHTML1.0,至少在HTML5进入之前是如此。 基于xml模板而不是代码的组合自定义控件 内联php代码。。。我正在考虑,它是一个有效的xml域处理指令节点,但评判人员尚未决定。 可配置的全局异常处理。 我已经在网上设置了初稿,所以你可以看一看,也许会给我一些好主意

顺便说一句,我会在接下来的几天内建立并运行表单。目前,这只是一个设计的初稿,无论是代码还是风格

仍然希望这里有更多的信息,你们这些人使用和喜欢什么样的控件?来自任何框架/语言


克里斯

在我看来,只有菲尔·雷夫真正阅读并理解了这个问题及其意图

那些声称php是模板引擎的人忽略了太多的事实,他们忽视了坚实的框架非常重要的现实世界

因此,到目前为止,这些点必须具有尚未实现的功能:

名单。我将在类似的控件中处理这些 验证。将通过验证控制进行处理。有规律的 表达、比较等。 输出是强制有效的XHTML1.0,至少在HTML5进入之前是如此。 基于xml模板而不是代码的组合自定义控件 内联php代码。。。我正在考虑,它是一个有效的xml域处理指令节点,但评判人员尚未决定。 可配置的全局异常处理。 我已经在网上设置了初稿,所以你可以看一看,也许会给我一些好主意

顺便说一句,我会在接下来的几天内建立并运行表单。目前,这只是一个设计的初稿,无论是代码还是风格

仍然希望这里有更多的信息,你们这些人使用和喜欢什么样的控件?来自任何框架/语言


克里斯

我想问题是我这次做得对吗?。我认为这是不可能回答的。我是说已经有200多人了!课程和一切,没有人能根据你在这里写的东西来判断你的作品。。。IIRC并不是针对这类问题。问题是关于模板引擎,我可能没有想到的必备功能是什么?不是关于整个框架。我还没有做过任何基准测试,但是在我的Macbook pro 2Ghz上,在正常的日常负载下,所有东西都感觉很快。你能提供你在问题中提供的源代码吗?@hakre:不再是了,但是看,最新版本应该在我完成通讯录演示应用程序后立即发布,该应用程序应该在今天发布,但我的进度有点落后。我想问题是我这次做得对吗?。我认为这是不可能回答的。我是说已经有200多人了!课程和一切,没有人能根据你在这里写的东西来判断你的作品。。。IIRC并不是针对这类问题。问题是关于模板引擎,我可能没有想到的必备功能是什么?不是关于整个框架。我还没有做过任何基准测试,但是在我的Macbook pro 2Ghz上,在正常的日常负载下,所有东西都感觉很快。你能提供你在问题中提供的源代码吗?@hakre:不再是了,但是看,最新版本应该会在我完成通讯录演示应用程序后立即发布,今天应该已经发布了,但是我的进度稍微落后了。我这么做是因为它很有趣,而不是因为我需要它。它一开始是为了证明php的能力不亚于aspx,但现在它只是一种爱好。我这么做是因为它很有趣,而不是因为我需要它。它最初是为了证明php的能力不亚于aspx,但现在它只是一种爱好。