マイナー [PHP フレームワーク] 3. ルーティング、コントローラー、ビュー、マイナー フレームワーク

WBOY
リリース: 2016-07-06 14:25:10
オリジナル
1004 人が閲覧しました

マイナー【PHPフレームワーク】3. ルーティング、コントローラー、ビュー、マイナーフレームワーク

3.1 ルーティング

本格的な Web アプリケーションには美しい URL が絶対に必要です。こうすることで、index.php?article_id=57 のような醜い URL が非表示になり、/read/intro-to-symfony のようなより一般的な URL に置き換えられます。

3.1.1 ルーティング設定

設定ファイルはapp/Config/routes.phpです

リーリー

上記のコードを例として、エレガントな (laravel 病...) ルーティングを構成する方法を詳しく説明します

「/demo/{productName}」は、ルーティングの一致ルールです。構成内の required は、productName が満たさなければならない正規の条件を指定します。フレームワークの実際の動作中に、ルーティング ルール + required が正規表現に解析されます。 /demo /(w+) 、URL (例: xxx.xxx.xxx/demo/testproduct) がこの通常のルールに一致すると、構成内のコントローラーのアクションが実行されます。具体的な実行は次のとおりです。 FooController->bar ($製品名) ;

ルーティング ルールの中括弧 (productName) の内容が bar メソッドのパラメーターであることがわかります。したがって、ルートを照合するときは、ルーティング ルールが特定のコントローラー メソッドのパラメーターの数と一致している必要があることに注意してください。一致しないと、ControllerException がスローされます。

3.1.2 デフォルトのルーティング設定

Controllerを定義するたびにルートを設定しなければならないと、開発効率の低下につながります。この問題の発生を防ぐために、Minorではデフォルトのルーティング機構が提供されています。 http://xxx.xxx.xxx/demo/foo/bar にアクセスすると、AppModulesDemoFooController の bar メソッドが実行されます。つまり、デフォルト ルートは次のとおりです。

http://xxx.xxx.xxx/{モジュール名}/{コントローラ名}/{メソッド名}

3.1.3 デメリット ご覧のとおり、マイナーのルーティングは強力ではありません。リクエストメソッドの制限、HTTPS の制限、およびフィルターはサポートされていません。

3.2コントローラー

3.2.1 独自のコントローラーを作成する Controllerの定義は非常にシンプルで、MinorControllerControllerの基底クラスを継承するだけです(もちろん継承する必要はありませんが、基底クラス内のメソッドやプロパティは使えないのでわかりやすいです)。 app/Modules/Demo/Controller/ フォルダーに移動し、ファイル FooController.php:

を作成します。 リーリー

xxx.xxx.xxx/demo/foo/bar(デフォルトルート、独自ルート設定も可能)にアクセスすると、Hello Worldが返ってくることがわかります。

3.2.2 URL生成 URL の gen メソッドを呼び出すと、デフォルトのパスをルーティング ルールに準拠した URL に変換できます

リーリー

3.1.1のルーティングに従ってUrl::gen('/demo/foo/bar?productName=test')が設定されている場合、/demo/testが返されます。

3.2.3 ページジャンプリダイレクト、リダイレクトフォワード Minor には、redirect、forward、forwardUrl という 3 つのジャンプ メソッドが用意されています (これら 3 つは、MinorControllerController の保護されたメソッドです)。

別の URL にジャンプするときは、コントローラーで次のように呼び出すことができます: $this->redirect($url);

別の URL にリダイレクトする場合、コントローラー内で次のように呼び出すことができます: $this->forwardUrl($url); (このメソッドの実装は、実際にはルーティングと URL リクエストのコントローラーとメソッドを解析することです)それから forward($controller, $action, $param)) を呼び出します

別のメソッドに転送する場合、コントローラー内で次のように呼び出すことができます: $this->forward($controller, $action, $params); (パラメーター $controller は、名前空間を含むコントローラーのクラス名です。 )

例:

リーリー

3.2.4 リクエストパラメータの取得 MinorRequest の get($paramName, $defaultParamValue = null) メソッドまたは post($paramName, $defaultParamValue = null) メソッドを呼び出して、リクエスト メソッドを取得します。

コントローラー内で次のように呼び出すことができます。 リーリー

3.2.5 リクエストメソッドの取得 MinorRequest の getMethod() メソッドを呼び出して、要求されたメソッドを取得します。 リーリー

3.3 ビュー

Minor は非常に強力なテンプレート エンジンを提供します。このテンプレート エンジンの名前は PHP です。はい!そうですよね、PHP。なぜマイナーはsmartyやTwigのようなテンプレートエンジンを提供しないのでしょうか? 必要がないので、PHP 自体で十分です。Minor がテンプレート エンジンを構築すると、間違いなく、Minor を使用するのが難しくなります。そのため、Minor は、ビュー ファイルの言語として PHP を直接使用します。

3.3.1 コントローラーでのビューの使用

コントローラーでビューを使用するには、 View::render('モジュール名:コントローラー名:ビューファイル名', ['param1key' => 'param1value', 'param2key' => 'param2value' を呼び出すだけです。 . .]); 例:

<span>class</span> FooController <span>extends</span><span> Controller
{
    </span><span>public</span> <span>function</span><span> bar()
    {
        </span><span>$param1</span> = 'Hello'<span>;
        </span><span>$param2</span> = 'World'<span>; 
        </span><span>return</span> View::render('Demo:Foo:bar.php', ['param1' => <span>$param1</span>, 'param2' => <span>$param2</span><span>]);
    }
}  </span>
ログイン後にコピー

  render函数的第二个参数(['param1key' => 'param1value', 'param2key' => 'param2value' ...])就是向视图文件中传递的变量,我们可以在视图文件中使用这些变量:

文件:app/Modules/Demo/Controller/Tpl/Foo/bar.php<br /><?php echo $param1key;?><br /><?=$param2key ?>
ログイン後にコピー

  3.3.2 视图内置函数

  Minor提供了两个视图文件中可以使用的函数:

<span>function</span> include_tpl(<span>$module</span>, <span>$controller</span>, <span>$tpl</span><span>)
{
    </span><span>require_once</span> (!<span>defined</span>('APP_DIR') ? APP_DIR : <span>realpath</span>(__DIR__ . '/../../app/') .DIRECTORY_SEPARATOR) . 'Modules' . '/' . <span>$module</span> . '/Tpl/' . <span>$controller</span> . '/' . <span>$tpl</span><span>;
}

</span><span>function</span> url(<span>$path</span><span>)
{
    </span><span>return</span> Url::gen(<span>$path</span><span>);
}</span>
ログイン後にコピー

  使用:

<span>html>   
    </span><span><?</span><span>php include_tpl('Public', 'Public', 'header.php');</span><span>?></span> 
    <span><</span><span>body</span><span>></span>
        <span><</span><span>h1</span><span>></span>Hello!<span></</span><span>h1</span><span>></span>
        <span><</span><span>a </span><span>href</span><span>="<?php url('/demo/foo/bar?productName=testpro');?>"</span><span>></span>
    <span></</span><span>body</span><span>></span>
<span></</span><span>html</span><span>></span>
ログイン後にコピー

  这两个函数定义在app/Resource/functions.php文件中,你可以在这个文件中自定义你需要的视图函数。

 

3.4 响应

  可以在控制器中通过调用App对象的getMinorResponse()方法来获取当前MinorResponse对象。 MinorResponse类提供了六个方法分别是:

<span>public function send(); // 用于将响应对象发送给客户端

public function setHeader($header);// 设置响应头

public function setContent($content); // 设置响应对象的内容

public function beforeContent($content); // 在当前已有的内容之前添加内容

public function appendContent($content); // 在当前已有内容之后追加内容

public function getContent(); // 获取对象中的响应内容</span>
ログイン後にコピー

 

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート