目次
これまで、アプリケーションは1ページしか含まれていないため、非常にシンプルでした。
物事を少し複雑にするために、「さようなら」という別のページを追加します。
<?php
ご覧のとおり、ほとんどのコードは最初のページとまったく同じです。
すべてのページに共通のコードを個別に強調してみましょう。
「共通コードの共有」は、最初の「実際の」フレームワークの素晴らしい計画のように思えます!
PHP内では、リファクタリングはインクルードファイルの作成で構成されます。
<?php
実際に見てみましょう:
<?php
さようならページの場合:
<?php
そのため、共通のコードを1か所にまとめました。 しかし、それは良いレベルの抽象化のようには見えませんか?
まず、すべてのページで
send()メソッドを呼び出しているため、ページは通常のテンプレートとは異なり、コードを「正しく」テストできません。
もう1つの深刻な問題は、新しいページを追加すると、新しいPHPスクリプトを作成する必要があることです。
その名前はURL(http://example.com/bye.php)で送信され、Webサーバーによって呼び出されます。
柔軟性を高めるために、目的のスクリプトへの呼び出しをコードに転送することをお勧めします。
これは、すべてのリクエストを単一のPHPスクリプト(フロントコントローラー)にリダイレクトすることで実現できます。
スクリプト自体は次のようになります。
<?php
そして、新しい
hello.phpの例:
<?php
front.phpスクリプトでは、
$ mapはURLのパスをスクリプトファイルへの対応するパスにリンクします。
ボーナスとして、クライアントが一致の配列で定義されていないパスを要求した場合、404エラーを返します。
今、あなた自身がサイトを制御します。
ページにアクセスするには、フロントコントローラーの
front.phpスクリプトを使用する必要があり
ます 。
/ helloおよび
/ byeはページパスです。
ヒント。
ApacheやnginxなどのほとんどのWebサーバーは書き換え可能です
ページのURLをリクエストして、フロントコントローラーのファイル( front.php )の名前をそれらから削除します。
ユーザーはexample.com/hello?name=Fabienと入力するだけでよくなります。
したがって、トリックは
Request :: getPathInfo()メソッドを使用することです。このメソッドは、「
Request 」からパスの一部を返します
すべてのサブディレクトリを含むフロントコントローラーのファイルの名前を削除します(必要な場合のみ-上記のヘルプを参照してください)。
Webサーバーを構成する必要さえありません。 ただ
呼び出しを置き換えます$ request = Request :: createFromGlobals(); $ request = Request :: create( '/ hello?name = Fabien');など 、
ここで、引数はシミュレートするクエリです。
ページへのすべてのリクエストが1つのスクリプト(front.php)を通過するようになったため、
ルートWebディレクトリの外部にある他のすべてのPHPファイルを転送することにより、セキュリティに貢献できます。
example.com
+-composer.json
src src
¦ +-autoload.php
¦ L--ページ
¦ +-hello.php
¦ L-- bye.php
+-ベンダー
L--ウェブ
L-- front.php
次に、
web /ディレクトリがそのルートになるようにWebサーバーを構成します。
クライアントは他のすべてのファイルを使用できなくなります。
このディレクトリ構造が機能するには、一部のプロジェクトファイルのパスを変更する必要があります。
これらの変更は読者にとって宿題になります。
すべてのページで繰り返される最後のことは、
setContent()の呼び出しです。
コンテンツを出力するだけで、すべてのページを「テンプレート」に変えることができます
フロントコントローラースクリプトから直接
setContent()を呼び出します:
<?php
これで、
hello.phpスクリプトをテンプレートに再作成できます。
<!-- example.com/src/pages/hello.php --> <?php $name = $request->get('name', 'World') ?> Hello <?php echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8') ?>
今日、フレームワークは次のようになります。
<?php
ページの追加は、2つのステップで行われます:要素を一致の配列に追加し、作成します
src / pages /にある PHPテンプレート。 テンプレートから、「
リクエスト 」データは
$リクエスト変数を介して利用可能です
また、
$応答変数を使用して応答ヘッダー( "
Response ")を操作できます。
すぐに停止する場合は、構成ファイルに一致するURLの配列を入力することをお勧めします。