[Maple-dev: 110] Re: Smartyのdefault_modifiersについて

Back to archive index

TAKAHASHI Kunihiko takah****@knosp*****
2006年 2月 9日 (木) 18:30:38 JST


高橋(kunit)です。

On Thu, 9 Feb 2006 16:57:01 +0900
舛川 竜治 <masuk****@nii*****> wrote:

> はじめまして、舛川 竜治と申します。
> 
はじめまして。今後ともよろしくお願いします。

> かけたくない部分に明示的に「|smarty:nodefaults」を書いていくほうが
> 作成していくうえで間違いがないと思いましたので、このように考えました。
> 
> その他、不必要なところまでかかってしまうというのは
> 具体的にどういうところで問題になるのでしょうか?
> 教えていただければ幸いです。
>
google先生に聞いてみると、foreachやsectionといった組み込み関数の
引数を無造作にかくとそれにも適用されてしまうというのを嫌っている人が
多いようですね。もちろんそういった場所に「|smarty:nodefaults」をマメに
かけていけばいいんですけどね。

default_modifiersをかけるとして、今回の{debug}のように既に作成済み
もしくは公開されているプラグイン等を使おうとしたらその邪魔をして、
いちいち変更していかないといけないとかになると面倒かなと思ったりも
しています。実は、普段余りそういったものを使用してないのであまり実感が
ないのですが、default_modifiersをかけた弊害というのを実感されて
いる方、ご説明いただけます?

この問題に関しては、以下のような折衷案にしてみようと思います。
(ダブルスタンダードになって混乱を招きますかね・・・)

  ・配布時のデフォルトは default_modifiies に「escape:'html'」を
    セットした状態にする。
  ・インストール手順で明示的に自分で指定するよという人はその設定を
    解除するように説明
  ・default_modifiers が指定されていない場合には、Smarty4Mapleの
    setActionで先ほどのメールで流していたような形でescape処理を
    ほどこす。

こんな感じでいかがでしょうか?
皆さんご意見よろしくです。

> また、こちらはSmarty4Mapleクラスの質問or疑問なのですが
> よろしければお答え願えないでしょうか?
> 
> 1.デバッグする際は、「$this->debugging = true;」
>   と記述し、最後、表示する際に「display」とすればよいと思ったのですが、
>   ソースでは、最後にfetchしたものをprintしています。
>   これは何か意図がございますでしょうか?
> 
Filter_Viewでは、以下の2通りの流れがあります。

  1. $response->getView() でviewタイプの指定がある場合(successやinput等)は
     それを使用して処理を行う。「location:」や「action:」で始まってない
     場合は、テンプレート指定をされているので、Smartyを使用して表示する
     内容を取得して、$response->setResult()でセットする。
       ⇒ これが通常パターンです。Actionクラスで「return 'success';」と
          やったり、Validatorにひっかかって input がセットされている
          ような場合ですね。

  2. ActionやFilter等で既に出力内容をセットしておいて、viewタイプを
     指定しない場合は、Smartyの処理は通らない(if ($view != "") {...} と
     いう部分を通らない)で、$response->getResult()経由で既にセット済みの
     内容をつかって表示
       ⇒ これは特殊なパターン。例えばActionでバイナリデータを読み込んで
          それを $response->setResult() でセットしておいて、
          「return;」というようにviewタイプを指定せずに終了すると
          Smartyの処理は通りません。

こういうことを意図してるので、fetchしてprintということになっています。

> 2.setAction等でregister_objectを使用していますが
>   templateのほうから、メソッドをよぶ場合、メソッドの引数は
>   引数配列,this(Smarty4Mapleオブジェクト)となるので
>   基本的なメソッド(または、$params, &$smarty_objをもつ関数)しか呼べないと思いました。
>   もちろん、引数がなければ問題ない(getName等)のですが
>   (escapeされないとなると問題あり!?)
>
これは色々な方からご指摘いただいてるところですね。

Smartyを使うこと前提の方なら、$params/&$smarty_objを引数に持つ
メソッドを準備されるということには抵抗ないかなと楽観視してたん
ですが、依存度がたかいぞーというお叱りをうけたりしてました。
そういった意味では、今回の {$action.xxxx} という形を標準に
すれば、Action側はあまりSmartyをつかったViewフィルターに依存
しないものになるので、いいかなと考えています。

>   setActionの最後のassignする処理があればよいと思いました。
>
この部分に関して、具体的にこういうことを考えてますというのを
示してもらってもいいですか?ちょっと想像がついてないので。
---
TAKAHASHI Kunihiko
KNOSPEAR Inc.




Maple-dev メーリングリストの案内
Back to archive index