2016-09-13 3 views
0

私はSymfonyとTwigを習得しようとしていますが、まだ多くのことを学ぶ必要があります。Symfony 3では画像をバンドル内外のウェブに保存できます/

私はTwigを使ってsvgイメージを挿入しようとしています。これだけAppBundleのウェブ/画像の画像ではなく動作します - <object id = "rotator" class="rotator" data = "{{ asset('images/clockwise.svg') }}" type = "image/svg+xml" ></object>

私の問題は、私は、「リソース/公共/画像」ではないのウェブ/画像に別々のバンドルでいくつかの画像を保存することを好むだろうということですAppBundle。ベストプラクティスのページには、「ベストプラクティス」が「web/」(AppBundleの)ディレクトリに格納されています。「このベストプラクティスが勧告か戒律かどうかはわかりません。

バンドルストレージが必要な私の理由は、再利用されないイメージのレッスンを書いているからです。 1回のみ使用されたイメージや少なくとも1つのバンドルで使用されたイメージでは、数千から数千ものレッスンが可能です。各レッスンやレッスンの対象ごとに別々のバンドルが必要です。これは数万本以上のバンドルを意味します。

すべての画像をAppBundleのweb/に入れると、すべての変数をグローバルにするようになります。一部の画像にはグローバルな適用性がありません。いくつかあります。ケミストリーレッスンには分子イメージがあり、歴史レッスンではジョージワシントンのイメージを持つことができます。そのような画像の多くは、混在する必要はありません。私はAppBundleの "/web/image"ディレクトリにそのような画像へのシンボリックリンクを持っていないことを好みます。各レッスンバンドルは自立していて、最終的にデータベースに保存できます。

私がAppBundle以外のバンドルにSVGイメージを保存しようとすると、404エラーが発生します。私はpngや他の画像フォーマットを試していません。

イメージをAppBundleから分離して、それを自分のバンドルに保管することはできますか?

もしそうなら、どのディレクトリですか?

AppBundleの/ web/imagesにコピーやシンボリックリンクを入れるには "bin/console assets:install"を使用する必要がありますか?

2番目の段落のコードはまともでないか、タスクを達成する良い方法がありますか。

私のファンダメンタルズに関する知識が不足しています。

jimfuqua


キーン、私は、ファイルを修正して、要求された正確な内容を持っていないが、それは次のようにについてでした:

{% image '@ClockwiseCounterclockwiseBundle/Resources/public/images/clockwise.svg' %} 
    <img src='{{ asset_url}}' alt='rotating_clockwise' /> 
{% endimage %} 

これは回転動的な画像を表示している必要があります風車のように。 SVGファイルはかなり長いです。

私は時計回りのSVGまたは反時計回りのSVGを選択するために乱数を実行するif文を持っていました。

イメージはあなたが言ったように表示されましたが、静的でした。私は、おそらくSVGファイルがエスケープされていたか、そうでなければ変更されたと考えました。この前提をテストするために、画像を右クリックして「新しいタブで画像を開く」を選択しました。それは開いてダイナミックでした。それは新しいタブにあるはずのように回転していました。画像ファイルが改ざんされていることは間違いだと思います。

私の次の仮定は、Symfonyがある種のページのスナップショットを撮り、それを静的な形で表示したことです。私はその前提をテストする方法を知らなかったので、私は別のアプローチを試しました。

私が静的画像の理由を理解できなかったとき、私はSVGファイルをif-else条件に直接ロードしました。これはうまくいきますが、SVGファイルが非常に長くてklutzyの解決策であるためです。コードの折り畳みが助けになりましたが、それはまだklutzyです。

私はSymfonyが私の目的に適しているのか疑問に思います。その目的は、数千または数万のレッスンをデータベースの個別ページまたはバンドルに保存し、必要に応じてそれらを表示することです。このような量は、Web /実用的ではないイメージ、CSSファイル、およびjsファイルを一緒にします。フォルダの内容は膨大です。 Drupalがより良い選択になるか、同じSymfonyの問題に直面しますか?

ご協力いただきありがとうございます。あなたは、すべてがあなたのケースのために、この文書http://symfony.com/doc/current/assetic/asset_management.html

に説明されていることができます。もちろん、

+0

「必ず使用する必要があります」--- yes – zerkms

+0

「Symfony Best Practices」では、アセットをAppBundleではなく「web /」に配置する必要があります。なぜあなたはそれらをサブフォルダ( 'course/physics/1/einstein.jpg')に入れないのですか? Liip Imagine Bundleを使用して画像をキャッシュすることができます。これは、あなたが好きな場所に置くことができます。バンドルはスケールされたバージョンを右のフォルダにコピーします(これにより、画像も自動的に拡大/縮小することができます)。 – Volvox

+0

Volvox、私はレッスンや関連レッスンのグループをそれが拡大するにつれてプログラムが穏やかに成長しないということです。レッスンはうまくいけば純粋なデータであり、必要になるまでプログラムの管理構造に混入することはありません。レッスンを引き離し、ここやそこに物を保管することは、最終的には非常に制限されます。 Kから12までの成績をカバーするには、数十万回のレッスンが必要です。 – JimFuqua

答えて

0

、あなたがAssetBundleという名前のバンドルを持っていると仮定することができます。

イメージをこのバンドルに保存し、twigテンプレートで使用できるようにするには、イメージをResources/publicフォルダに置くだけです。

それからちょうどドキュメントのように実行します。

{% image '@AssetBundle/Resources/public/images/clockwise.svg' %} 
<img src="{{ asset_url }}" alt="Clockwise" /> 
{% endimage %} 

これはAsseticは、特定のコントローラを使用して、すべての資産を利用できるようにするため、開発環境であるとして動作しますが、php bin/console assetic:dump --env=prod

と生産にあなたの資産をダンプするために覚えているでしょう

もっと理解を深めるには、私が提供したドキュメント全体をお読みください。それは役に立つかもしれない。

+0

キーン、あなたは正しいです。画像がロードされますが、1つの問題が残ります。 symfonyでそのまま読み込み、回転しないのはなぜですか?新しいタブにコピーすると回転するのはなぜですか? – JimFuqua

+0

私はあなたのコメントを理解していません。 2つの異なるケースを表示するために投稿を編集してください。 – Keen

関連する問題