Development

Documentation/ja_JP/book/1.0/07-Inside-the-View-Layer (diff)

You must first sign up to be able to contribute.

Changes between Version 4 and Version 5 of Documentation/ja_JP/book/1.0/07-Inside-the-View-Layer

Show
Ignore:
Author:
takuya.morioka (IP: 210.146.141.174)
Timestamp:
03/23/07 07:27:26 (10 years ago)
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Documentation/ja_JP/book/1.0/07-Inside-the-View-Layer

    v4 v5  
     1symfonyの日本語訳をする 
     2 
    13= Chapter 7 - Inside The View Layer = 
    24 
    138140The template shown in Listing 7-1 is not a valid XHTML document. The `DOCTYPE` definition and the `<html>` and `<body>` tags are missing. That's because they are stored somewhere else in the application, in a file called `layout.php`, which contains the page layout. This file, also called the global template, stores the HTML code that is common to all pages of the application to avoid repeating it in every template. The content of the template is integrated into the layout, or, if you change the point of view, the layout "decorates" the template. This is an application of the decorator design pattern, illustrated in Figure 7-1. 
    139141 
     142例)7-1を見てください。このテンプレートはXHTML形式として正しくないです。DOCTYPE宣言とHTML、BODYタグがありません。抜けているタグはプログラム中の他の場所で親になるテンプレートが宣言されているからです。大本になるテンプレートは"layout.php"です。ここにページにコンテンツが配置されていきます。このファイルはGlobalなテンプレートです。ここに共通部分を書いておくことで無駄な繰り返しを防ぎます。コンテンツはこのテンプレート内に埋め込まれていきます。つまり、このテンプレートはコンテンツを"decorates"(訳注:飾り枠、額縁の意味)するのです。これはデコレーターパターン(訳注:GOFパターンの一つ)を用いてコンテンツを描画するのです。 
     143 
    140144>**TIP** 
    141145>For more information about the decorator and other design patterns, see Patterns of Enterprise Application Architecture by Martin Fowler (Addison-Wesley, ISBN: 0-32112-742-0). 
     146 
     147>**注** 
     148>デザインパターンについてもっと知りたいときは、専門書を読むと良いですよ。参考文献 Patterns of Enterprise Application Architecture by Martin Fowler (Addison-Wesley, ISBN: 0-32112-742-0). 
     149 
    142150 
    143151![][13] 
    168176 
    169177The helpers called in the `<head>` section grab information from the response object and the view configuration. The `<body>` tag outputs the result of the template. With this layout, the default configuration, and the sample template in Listing 7-1, the processed view looks like Listing 7-6. 
     178 
     179Helper関数が<HEAD>内で利用されています。Helper関数はresponse オブジェクトとview設定から適切なHEAD宣言を書き出します。<BODY>タグにはコンテンツを書き出します。このレイアウトとデフォルト設定を使って7-1のテンプレートを出力した場合、出力は7-6の例になります。 
    170180 
    171181Listing 7-6 - The Layout, the View Configuration, and the Template Assembled 
    198208The global template can be entirely customized for each application. Add in any HTML code you need. This layout is often used to hold the site navigation, logo, and so on. You can even have more than one layout, and decide which layout should be used for each action. Don't worry about JavaScript and style sheet inclusion for now; the "View Configuration" section later in this chapter shows how to handle that. 
    199209 
     210globalテンプレートは各App毎に独立して作成が可能です。テンプレートに必要なHTMLを書き込んでください。レイアウトにサイトのナビゲーションメニューやロゴを入れることもあります。レイアウトはいくつでも作成が可能です。どのレイアウトを使うかはAction内や設定ファイルなどApp毎に決定すると良いです。JSとCSSはどこで管理するんだ?と言う心配は無用です。”View Configuration”の解説でそれらの扱い方を解説しています。。 
     211 
    200212### Template Shortcuts 
     213### テンプレート内の変数 
    201214 
    202215In templates, a few symfony variables are always available. These shortcuts give access to the most commonly needed information in templates, through the core symfony objects: 
     216 
     217テンプレート内では、symfony変数の幾つかが利用可能です。これらはショートカットされた変数名でアクセスできます。必要とされるものには大抵ショートカットが定義されています。 
    203218 
    204219  * `$sf_context`: The whole context object (`instance of sfContext`) 
    207222  * `$sf_user`: The current user session object (`instance of` `sfUser`) 
    208223 
     224  * `$sf_context`: sfContextの実体その物です 
     225  * `$sf_request`: sfRequestのその物です 
     226  * `$sf_params`: HTTP Reuestパラメーターです 
     227  * `$sf_user`: 現在のセッションと関連付けられているsfUserの実体です 
     228 
    209229The previous chapter detailed useful methods of the `sfRequest` and `sfUser` objects. You can actually call these methods in templates through the `$sf_request` and `$sf_user` variables. For instance, if the request includes a `total` parameter, its value is available in the template with the following: 
     230 
     231コレまでの章では`sfRequest` と `sfUser`の便利なメソッドを使ってきました。テンプレートからもそれらの便利なメソッドを扱うことができます。違いは`$sf_request`、`$sf_user`の変数を通してメソッドを使う点です。たとえば、$_REQUEST["total"]にアクセスする場合、テンプレート中からは次のようにアクセスします。 
    210232 
    211233    [php] 
    213235    <?php echo $sf_request->getParameter('total'); ?> 
    214236 
    215     // Shorter version 
     237    // Shorter version 省略形 
    216238    <?php echo $sf_params->get('total'); ?> 
    217239 
    218240    // Equivalent to the following action code 
     241    // 上記はAction中でこのメソッドと同等です 
    219242    echo $this->getRequestParameter('total'); 
    220243 
    221 Code Fragments 
     244Code Fragments / ソースの分割再利用 
    222245-------------- 
    223246 
    224247You may often need to include some HTML or PHP code in several pages. To avoid repeating that code, the PHP `include()` statement will suffice most of the time. 
    225248 
     249幾つかのページで同じHTML/PHPコードを使い回すことがあると思います。ここはDRY(Don't Repeat Yourself)原則に従いたいところです。include()を使って間に合わせることが多いことでしょう。 
     250 
    226251For instance, if many of the templates of your application need to use the same fragment of code, save it in a file called `myFragment.php` in the global template directory (`myproject/apps/myapp/templates/`) and include it in your templates as follows: 
    227252 
     253このよう場合、たくさんのテンプレート中から同じコードを使いたいと思うことでしょう。そのコードを"myFragments.php"として保存し、globalテンプレートに保存しましょう。保存先は(`myproject/apps/myapp/templates/`)です。このテンプレート化したコードをテンプレート中から何度も呼び出して使い回せます。次の例のようにします。 
     254 
     255 
    228256    [php] 
    229257    <?php include(sfConfig::get('sf_app_template_dir').'/myFragment.php') ?> 
    230258 
    231259But this is not a very clean way to package a fragment, mostly because you can have different variable names between the fragment and the various templates including it. In addition, the symfony cache system (described in Chapter 12) has no way to detect an include, so the fragment cannot be cached independently from the template. Symfony provides three alternative types of intelligent code fragments to replace `include`s: 
     260 
     261ただ、これでは、とてもきれいなコードパターンの管理とは言えません。変数名がコードパターンで違うだけの似たようなテンプレートをたくさん作ってしまいがちです。テンプレートとコードパターンで違う変数名が含まれていたりします。このような場合、Symfonyのキャッシュシステム(12章で解説します)が名前を解決できません。つまりそのままでは、コードパターンはテンプレートに埋め込まれてキャッシュされ、コードパターンだけを独立してキャッシュすることができないのです。これを解決する方法がSymfonyには3つあります。Symfonyには"include"sの代用に使えるスマートな方法があるのです。 
     262(訳注:SmartyのIncludeにも同じようなモノがありましたねぇ) 
    232263 
    233264  * If the logic is lightweight, you will just want to include a template file having access to some data you pass to it. For that, you will use a partial. 
    235266  * If the fragment is meant to replace a specific part of the layout, for which default content may already exist, you will use a slot. 
    236267 
     268  * ロジックが単純なとき、テンプレートファイルにデータを渡してしまえばよいかもしれません。そのときはPartialが便利です。 
     269  * ロジックが複雑なとき(たとえば、データモデル(訳注:DB)にアクセスしたり、セッション変数で表示内容を変更するなど)この場合は、プレゼンテーション層とロジック層を分離して管理する方が良いかもしれません。そのときはComponentが便利です。 
     270  * If the fragment is meant to replace a specific part of the layout, for which default content may already exist, you will use a slot. 
     271  * コードパターンでレイアウトのコンテンツを切り替えるとき、尚かつ、コンテンツがすでに存在するとき、Slotが便利かもしれません。 
     272 
    237273![][14] 
    238274 
    242278>Another code fragment type, called a component slot, is to be used when the nature of the fragment depends on the context (for instance, if the fragment needs to be different for the actions of a given module). Component slots are described later in this chapter. 
    243279 
     280>**メモ** 
     281>Slotとよんでいる、コードパターンの再利用ではコンテンツはContextに深く依存しています。(例を挙げれば、コードパターンのコンテンツ作成に現在のActionとは違うActionを必要とする場合とか)Slotsについては後述します 
     282 
     283 
    244284![][15] 
    245285 
    248288The inclusion of these fragments is achieved by helpers of the Partial group. These helpers are available from any symfony template, without initial declaration. 
    249289 
     290SymfonyではHelper関数を使ってIncludeを実現しています。Partial Helper関数はテンプレート中であれば宣言無しに使って大丈夫です。 
     291 
     292 
    250293### Partials 
    251294 
    252295A partial is a reusable chunk of template code. For instance, in a publication application, the template code displaying an article is used in the article detail page, and also in the list of the best articles and the list of latest articles. This code is a perfect candidate for a partial, as illustrated in Figure 7-2. 
     296 
     297partial はテンプレートコードの再利用の部品です。たとえば、アプリケーションの出力部分で、エントリを出力するとき、エントリ詳細部分をパーツににしておけば、最新のエントリやベストエントリの出力時に再利用できたりします。こういう場合はPartialがベストチョイスです。7-2を見てください 
    253298 
    254299![][16] 
    10331078---- 
    10341079[wiki:Documentation/ja_JP/ 目次] 
     1080