私は実際に答えを知っているphpのタグが付けられた質問に答えるのに遅れているので、自分で質問してみることにしました。
私は非常に長い間、php でカスタム テンプレート エンジンを完全に書き直す作業を何度も行ってきたので、意見を求めたいと思いました。
要するに、これは私がこれまでに実装した最も重要な部分です。
- http リクエストはすべて handler.php にルーティングされます
- 要求された URL に基づいてコントローラーがインスタンス化され、そのコントローラーのメソッドが呼び出されます。
- コントローラー メソッドは、
IView
互換性のあるクラス インスタンスを返す必要があります (メソッドIView
を定義しますRender()
) 。- テンプレート エンジンは、'serverside' で終わる名前空間ごとに xpath を実行します。
sprintf('//%s:*[@runat="server"]', $namespaceprefix )
- 見つかったタグごとに、によって識別される php クラスを検索し、
$tag.localName
インスタンス化して元のテンプレートに添付します。 - アタッチされると、元のテンプレート ノードが「ServerTag」に供給されるため、適切に初期化できます。
- 完全に完全な IView 互換インスタンスは、コントローラ メソッドの一時変数に割り当てられます。
- テンプレート エンジンは、'serverside' で終わる名前空間ごとに xpath を実行します。
- コントローラーは、Model クラスからビューにデータをプッシュするように要求します。ビューは、気の利いた xpath DOM 置換を行います。
- コントローラーは、完全に塗りつぶされたビューを
main()
ハンドラーに返し、ハンドラーはそれをレンダリングします。
テンプレートを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&s=32&r=pg" alt="Gravatar"/>
 Kris
</a>
<br/>
<small>
 Rep: 1
</small>
</div></div>
</div>
</body>
</html>
- ここで触れたのは氷山の一角にすぎません。はい、機能に満足したら、未使用の xmlns 属性を出力から削除します。
- 現在、私の mvc とコア フレームワークには 200 を超えるクラスがあります。
- 同様のことを実行できる既存のソリューションがあることは承知していますが、独自のソリューションを構築したいと考えています。
重要な質問は次のとおりです。必須の機能について意見はありますか?
PS 誰かが完全なソース コードに興味を持っている場合は、コメントを残してください。適切な開発者のユーザビリティ レベルに達したら、自分のサイトで提供します。