2011-12-27 18 views
0

私のGSP(Grailsサーバーページ)やGroovyでphp requireと正確に等しいコマンドを知りたかったのです。PHP require vs grails include

私は<g:include/>を使用できますが、groovy/grailsでphp requireを満たすコマンドがあることを知りたがっていますか?

+0

Grails内で 'require()'と同等の処理が必要なことについて、より多くのコンテキストを提供できますか? –

答えて

1

正確なは、実際にはrequire()がPHPスクリプトで使用されている内容に依存します。

PHPとサーブレットの環境が異なるように動作します。 PHPでrequire()を使用すると、別のPHPスクリプトが見つかって実行されます。その命令的スタイルの操作は、よりオブジェクト指向のJava/Grails /サーブレットにはあまり適していません。

  • <g:include/>

    は、内の別のコントローラ/アクションまたはビューの応答が含まれています:

    はあなたが達成しようとしているものに応じて、可能な同等のカップルがあります 現在の応答

    <g:include controller="foo" action="bar"/> 
    

    これは、異なるコントローラ/アクションを呼び出し、現在のページに応答を挿入することです。 require()がマークアップをレンダリングしていた場合、これはPHPに似ています。

  • View templates:あなただけのいくつかのページにマークアップの共通部分を含めるようにしようとしている場合は

    、これらはあなたが探しているものかもしれません。テンプレートビューを作成し、<g:render/>を使用してそれらをGSPに含めることができます。私はこれがあなたの後ろのものだと思うが、これに関するいくつかのアドバイスについては、私の「アップデート」を見てください。

  • @page import

    例えば

    <% @page import="com.example.mypackage.MyClass" %> 
    

    これは、他のPHPスクリプトで使用されるいくつかのライブラリクラスや関数を指定して必要な場合require()と同様であるGSP、に利用できるMyClassを行います。しかし、これを使用すると、コントローラーの動作やサービスの中で、これを使用するほとんどのものがより適切になるため、コードの臭いが悲鳴を上げることがあります。

更新:

あなたother questionを見て、私はあなたが単純な種類のGrailsのが提供するものに反する、いくつかの異なるビューでGSP/HTMLの共通部分を含むようにしようとしているベンチャーますそのレイアウトとテンプレートであなたのために。

すべてのGSPで「blog-header.php」を「要求」する場合は、レイアウトの中にヘッダーのコンテンツを含めるほうがよいでしょう。 grails-app/views/layouts/main.gspを作成し、ヘッダーを必要とするビューでそのレイアウトを使用します。

+0

返信いただきありがとうございます! Grailsはsitemeshを使い、WordPressは異なるテーマを使用して、手を汚したり、さまざまなオプションを探しています。私はそれが良い習慣ではないので、私のgspのクラスにクラスをインポートするのが好きではありません。私はg:includeを使い始めます。ここで、どこかで静的なコンテキストや変数が必要な場所は、コントローラや他のドメインクラスのために行います。私はコンテクストを得ることができるコトローラから推測し、そこから私は設定情報を読むことができます。 – springpress

+0

@springpress - 私は助けることができてうれしいです。私が理解しているところから、Wordpressのコードベースは、エレガントで組織化されたコードの最も素晴らしい例ではありません。しかし、それは私がそれについて話したことのある人からの伝言だけです。おそらくそれはそれ以来変わっています。それにもかかわらず、GrailsからGrailsにまっすぐな1:1変換を行おうとすると、Grailsが提供する便利さの大部分を迂回する可能性があるので、考慮してください。 –

0

多分あなたはgrails 'template'を試してください。

テンプレートは、任意のビュー内の任意の時間を使用することができるビューのフラグメントであり、これはDRY PROMOVEする..

<g:render template="myTemplate" model="['object1':object1,'object2':object2]" /> 

この場合べきGSPは_myTemplate.gspと呼ばれ、このテンプレートに存在します2つのオブジェクトを使って作業している場合は、必要に応じてコンテンツのみを扱い、オブジェクトを処理するテンプレートは使用できません。

<g:render template="other/myTemplate" model="['object1':object1,'object2':object2]" /> 

そして、テンプレートの名前であるため、パターン:上記の呼び出しで

テンプレートは、テンプレートと同じフォルダにビューに呼び出されていますが、他のフォルダ内の別のビューからそれを呼び出すことができます

同じ...

を参照してください...

関連する問題