あなたのsymfonyビューをNumberNine


Symfonyを使用して簡単なページを構築するときは、通常、コントローラとビューを持って終了します.

しばしば、物事は複雑になり、1つのコントローラはもう実行可能な解決策ではありません.

Symfonyは複数のコントローラにビューを分割する方法をいくつか提供しています.ナンバー9 CMSは、もう2を提供します.それぞれの方法が提供するどの円錐とプロを見ます.
  • Twigパーティションの使用include
  • {% include 'my_partial.html.twig' with {message: 'hello'} %}
    
  • Twigパーティションの使用embed
  • {% embed 'my_partial.html.twig' %}
        {% block message %}hello{% endblock %}
    {% endembed %}
    
  • 使用embedded controllers
  • {{ render(controller('MyController', {message: 'hello'})) }}
    
  • 使用Twig components
  • {{ component('my_component', {message: 'hello'}) }}
    
  • Numbernineコンポーネントの使用
  • {{ N9_component('MyComponent', {message: 'hello'}) }}
    
  • NumberNineのショートコードの使用
  • {{ N9_shortcode('[my_shortcode message="hello"]') }}
    

    各手法の長所


    Twigは含まれており、埋め立ては素晴らしいと柔軟性がありますが、そのデータは、上記のルートコントローラから肥大化されます.もちろん、サービスにアクセスするには、Twig拡張やグローバル変数などの回避策がありますが、ビューでは、コントローラが送信しなかったデータを取得してはいけません.
    彼らが新しい要求をして、否定的にパフォーマンスに影響を及ぼすので、彼らが散発的に使われるならば、埋め込まれたコントローラは良い解決です.
    ツイッグコンポーネントは、いくつかの制限がありますが、埋め込みコントローラよりも優れたアプローチです.コンポーネントは非共有サービスです.これは、新しいインスタンスが{{ component('my_component') }} , 以前に保存されたデータを消去する.これは、コンポーネントがイベントリスナーを登録した場合、そのインスタンスがその場で作成されたときに動作しません.

    コンポーネント


    NumberNixコンポーネントは、コンポーネントが呼び出されるたびに、テンプレートパラメータの新しいセットを作成することによって、Twigコンポーネントの別のインスタンスの問題を解決しますが、コンポーネントのインスタンス自体は同じままです.
    NumberNineコンポーネントは共有サービスです.したがって、イベントリスナーが登録されたイベントをキャッチします.パラメータ注入はセッターを通して行われます.
    具体例です.
    # templates/page/show.html.twig
    
    {{ N9_component('MyComponent', {example: 'string variable'}) }}
    
    // src/Component/MyComponent/MyComponent.php
    
    final class MyComponent implements ComponentInterface
    {
        private string $example;
    
        public function setExample(string $example): void
        {
            $this->example = $example;
        }
    
        public function getTemplateParameters(): array
        {
            return [
                'example' => $this->example,
            ];
        }
    }
    
    // src/Component/MyComponent/template.html.twig
    
    <p>Displaying custom variable: {{ example }}.</p>
    
    また、Numbernineの他のすべてのビューと同様に、コンポーネントテンプレートはオーバーライド可能です.あなたが使用するテーマは多分コンポーネントを使用します、そして、あなたは多分デザインを適応させたいでしょう.
    Read more ドキュメントページのコンポーネントについて.

    NumberNine shortcodes


    コンポーネントは開発者指向ですが、ショートコードはビューにテンプレートを注入するユーザー指向の方法です.
    また、BBCodes、ショートコードとして広く使用されているフォーラムやCMSの年間で使用されます.それらは、ユーザが編集者に入力できる文字列で表される.
    短い構文です.
    [my_shortcode message="hello"]
    
    または拡張構文
    [my_shortcode]hello[/my_shortcode]
    
    拡張構文は入れ子になったショートコードを許可します:
    [my_shortcode]
        [my_nested_shortcode message="hello"]
    [/my_shortcode]
    
    NumberNineサービスとしてショートコードを処理します.各ショートコードには、コントローラのように動作する独自のクラスがあります.
    例として、このページヘッダを解析します.

    今、シーンの背後に表示される方法を見てください.

    これはエディタでの手動入力の結果ではありません.詳細については、ページビルダーについてのこの記事の最後のセクションを参照してください.
    我々の見解分割に戻ってください.それを単に置くために、このヘッダーは9つのコントローラと9つの見解から成ります.
    しましょうmy_account_link それは非常に基本的なショートコードとしてショートコードとどのように構築されて参照してください.その目的はユーザ定義の「マイアカウント」ページに自動的にリンクすることです.
    /**
     * @Shortcode(name="my_account_link", label="My Account Link")
     */
    final class MyAccountLinkShortcode extends AbstractShortcode
    {
        public function configureParameters(OptionsResolver $resolver): void
        {
            $resolver->setDefaults([
                'loggedOutText' => 'Login / Register',
                'loggedInText' => 'My account',
            ]);
        }
    
        public function processParameters(array $parameters): array
        {
            return [
                'loggedOutText' => $parameters['loggedOutText'],
                'loggedInText' => $parameters['loggedInText'],
            ];
        }
    }
    
    テンプレートは次のようになります.
    <a href="{{ N9_path(PAGE_FOR_MY_ACCOUNT) }}">
        {%- if is_granted('IS_AUTHENTICATED_REMEMBERED') -%}
            {{ loggedInText|trans }}
        {%- else -%}
            {{ loggedOutText|trans }}
        {%- endif -%}
    </a>
    
    今では開発者によって使用することができます{{ N9_shortcode('[my_account_link]') }} , または、テキストエディタでユーザーによって直接[my_account_link] .
    以上です.私たちの意見は、多くの方法で分割することができますし、まだ高性能を維持することができます.主制御装置は非常に軽いままでいます、そして、すべての部分的なコントローラは彼ら自身の応答性を取り扱います.これは、コードを非常に再利用可能な開発者とユーザーの両方を使用して簡単になります.
    Read more ドキュメントページのショートコードについて.

    ショートコードとページビルダ


    Numbernineのページビルダーは、ビューを構築するショートコードに依存します.各ショートコードは、編集可能なショートコードとして定義できます.これは、ユーザーに使用可能なコンポーネントのページビルダーのリストに表示されます.
    これは他の記事のトピックです.一方check out the documentation ショートビルダーでページビルダーコンポーネントを構築する方法を確認します.

    続きを読む