JSONデータを効率的に使用して、Laravel Bladeテンプレートにカスケードドロップダウンメニューを実装します
最新のWebアプリケーション開発では、特に動的フォームまたはデータセレクターを構築する場合、ローカルJSONファイルなどの非データベースソースからデータをロードしてユーザーに提示する必要があることがよくあります。 Laravelフレームワークは、そのようなニーズを処理するための簡潔なメカニズムを提供します。この記事では、JSONデータをLaravel Bladeビューに統合し、マルチステージリンケージドロップダウンメニューをさらに実装する方法について説明します。
1。JSONデータの読み込みと解析
まず、LaravelコントローラーのJSONファイルを読み取り、解析する必要があります。これは通常、ビューレンダリングを処理する方法で行われます。
witherrors( 'jsonデータファイルは存在しません!'); } // json fileのコンテンツを読み取ります$ jsonstring = file_get_contents($ jsonfilepath); // JSON文字列をPHPアレイにデコードする// 2番目のパラメーターは、JSONオブジェクトをjsonオブジェクトを連想配列にデコードすることを意味します。 //デコードが成功したかどうかを確認してください(json_last_error()!== json_error_none){ // JSON解析エラーを処理しますreturn back() - > witherrors( 'json data parsing failed:'。json_last_error_msg()); } //解析されたデータをビューに渡すreturn View( 'users.create') - > with( 'details'、$ details); } }
説明:
- base_path( 'resources/data/address.json'):JSONファイルを取得するために使用される絶対パス。このような静的データファイルをリソースディレクトリに配置して、簡単に管理することをお勧めします。
- file_get_contents():ファイル全体を文字列に読み取ります。
- json_decode($ jsonstring、true):JSON文字列をPHP変数にデコードします。真のパラメーターを渡すと、JSONオブジェクトを連想配列に変換します。これは、ブレードテンプレートのキー名を介してデータにアクセスするときにより便利です。
- エラー処理:ファイルの存在チェックとJSONデコードエラーチェックの追加。これは、生産環境での堅牢なコードの必要な部分です。
2。ブレードテンプレートにデータを表示(基本ドロップダウンメニュー)
ブレードビューでは、@Foreachループを使用して、コントローラーで渡された配列を反復し、HTML
address.jsonファイル構造が次のとおりであるとします。
[ { 「地域」:「naypyitaw連合領土」、 「町」:「Za bu thi ri township」、 「四半期」:「Zay Ya Theik di Quarter」、 「郵便番号」:1501001 }、 { 「地域」:「naypyitaw連合領土」、 「町」:「Za bu thi ri township」、 「四半期」:「Pyin Nyar Theik di Quarter」、 「郵便番号」:1501002 } ]
users/create.blade.phpファイルで、次のような地域のドロップダウンメニューを表示できます。
領域: <name id="region" class="form-control">を選択します 領域を選択してください {{ - array_uniqueを使用して、領域が繰り返されないことを確認します - }} @foreach($ detail-> sique( 'region')as $ detail) <option detail> {{$ detail ['region']}} </option> @endforeach </name>
説明:
- $の詳細は、コントローラーから渡されたJSONデータアレイ全体です。
- $ details-> inited( 'region'):ドロップダウンメニューで領域オプションの重複を避けるために、BladeのLaravelコレクションの一意の()メソッドを使用できます。これには、$ details変数がlaravelコレクションであることが必要です(コントローラーでコレクション($ details)を介して変換するか、collect($ details) - > sinque( 'region')を使用してブレードで直接変換できます)。 $の詳細が通常のPHPアレイである場合、コントローラーの重複排除またはブレードの手動で重複排除を処理する必要があります。
- $ DEATURE ['region']:JSON_DECODEは真のパラメーターを使用するため、$ DEATUREは連想配列であり、そのキーは四角い括弧[]を介してアクセスされます。
3.カスケードドロップダウンメニュー(JavaScriptの相互作用)を実装する
「ユーザーが特定の領域を選択する場合、その領域の下のタウンシップのみが表示される」というカスケード関数を実装するには、JavaScriptを組み合わせる必要があります。一般的なアプローチは、すべてのデータを一度にフロントエンドに渡してから、JavaScriptを介してフィルタリングしてクライアントを埋めることです。
3.1フロントエンドデータを準備します
JavaScriptが$の詳細データにアクセスするには、通常はJSON文字列であり、<script>タグに埋め込まれたJavaScriptで使用できる形式に変換する必要があります。</script>
// PHPアレイをJSON文字列に変換し、JavaScript変数const alldetails = @json($ details)に割り当てます。 //またはjson.parseを使用( '{!! json_encode($ details)!!}');より厳格な脱出が必要な場合 領域: <name id="region" class="form-control">を選択します 領域を選択してください @foreach(collect($ details) - > sique( 'region')as $ detail) <option detail> {{$ detail ['region']}} </option> @endforeach <label for="town" class="mt-3">タウンシップ:</label> <select name="town" id="town" class="form-control" disabled> タウンシップを選択してください </select> <label for="quarter" class="mt-3"> block:</label> ブロックを選択してください <label for="posal_code" class="mt-3"> zipコード:</label> </name>
3.2 JavaScriptロジックの書き込み
次に、JavaScriptコードを追加して、エリア選択の変更を聞き、タウンシップを更新し、ドロップダウンメニューを動的にブロックします。
// document.addeventlistener( 'domcontentloaded'、function(){ const regionselect = document.getElementById( 'region'); const townselect = document.getElementById( 'Town'); const quarterSelect = document.getElementById( 'Quarter'); const postalcodeInput = document.getElementById( 'postal_code'); //町をクリアして無効にし、ブロックドロップダウンメニュー関数ResetTownAndquarter(){ TownSelect.innerhtml = '<option value="">タウンシップを選択してください</option>'; TownSelect.disabled = true; QuarterSelect.innerhtml = '<option value="">ブロックを選択してください</option>'; QuarterSelect.disabled = true; postalcodeInput.value = ''; //郵便番号をクリア} Resettownandquarter(); // regionselect.addeventlistener( 'change'、function(){ const selectedRegion = this.value; Resettownandquarter(); // if(selectedRegion){ //選択されたエリアに一致するタウンシップデータを除去しますconst filteredtowns = alldetails.filter(item => item ['region'] === selectedRegion); // const uiniquetowns = [... new set(filteredtowns.map(item => item ['town'])]]]に複製されていない町のリストを取得します。 //「町」にはスペースがあることに注意してください//タウンシップのドロップダウンメニューユニークタウン。 const option = document.createelement( 'option'); option.value = town; option.textContent = own; TownSelect.AppendChild(オプション); }); townSelect.disabled = false; //タウンシップのドロップダウンメニューを有効にします} }); townselect.addeventlistener( 'change'、function(){ const selectedRegion = regionselect.value; const selectedtown = this.value; QuarterSelect.innerhtml = '<option value=""> block </option>';を選択してください。 // block quarterselect.disabled = true; postalcodeInput.value = ''; //郵便番号をクリアする場合(SelectedRegion && SelectedTown){ //選択したエリアとタウンシップconst filteredquarters = alldetails.filter(item =>に一致するブロックデータを除去 item ['region'] === selectedRegion && item ['town'] === selectedtown ); //非重複していないブロックのリストを取得constquarters = [... new set(filteredquarters.map(item => item ['quarter'])]]; //「クォーター」にはスペースがあることに注意してください const option = document.createelement( 'option'); option.value = Quarter; option.textContent = Quarter; QuarterSelect.AppendChild(オプション); }); quarterselect.disabled = false; //ブロックドロップダウンメニューを有効にします} }); QuarterSelect.addeventListener( 'change'、function(){ const selectedRegion = regionselect.value; const selectedtown = townselect.value; const selectedquarter = this.value; postalcodeInput.value = ''; //郵便番号をクリアする場合(SelectedRegion && SelectedTown && selectedQuarter){ //対応する郵便番号を見つけるconst matcheddetail = alldetails.find(item => item ['region'] === selectedRegion && item ['Town'] === selectedtown && item ['quarter'] === selectedquarter ); if(matcheddetail){ postalcodeInput.value = matcheddetail ['postal code']; } } }); });
説明:
- @JSON($の詳細):これは、PHP変数を安全にJSON文字列に自動的に変換し、JavaScriptで直接使用できるHTMLエンティティをエンコードするLaravel Bladeの便利な指令です。
- document.addeventlistener( 'domcontentloaded'、...):HTMLドキュメントが完全にロードされて解析された後にJavaScriptコードが実行されることを確認します。
- filter()とmap():データのフィルタリングと変換に使用されるJavaScriptアレイの一般的な方法。
- [... new set(...)]:アレイから一意の要素を抽出するための簡潔なJavaScript構文。
- 無効プロパティ:ユーザーが有効な選択をする前に、後続のドロップダウンメニューを無効にします。
- 鍵名に注意してください:町の端にスペースがあり、JSONデータには四分の一のキー名があります。 JavaScript、たとえば項目['Town']にアクセスするときは、これらのスペースを保持してください。実際の開発では、キー名を標準化し、スペースを回避することをお勧めします。
3.3大規模なデータセットの考慮事項
JSONファイルが非常に大きい場合、すべてのデータを一度にフロントエンドにロードすると、パフォーマンスの問題が発生する可能性があります。この場合、より良いアプローチは次のとおりです。
- 初期読み込み:ページがロードされているときの最初のドロップダウンメニュー(「エリア」など)のデータのみをロードします。
- AJAXリクエスト:ユーザーがリージョンを選択すると、Ajax要求がJavaScript(たとえば、Fetch APIまたはAxiosを使用する)を介してバックエンドに送信され、選択した領域をパラメーターとして使用します。
- バックエンドフィルタリング:バックエンドコントローラーがリクエストを受信した後、パラメーターに従ってJSONファイルから対応するタウンシップデータを除去し、JSON形式で返します。
- フロントエンドの更新: JavaScriptがバックエンドによって返されたデータを受信した後、タウンシップのドロップダウンメニューを動的に記入します。
- 繰り返しますが、後続のブロックなどについてこのプロセスを繰り返します。ドロップダウンメニュー。
この方法では、初期ページにロードされたデータの量を減らし、ユーザーエクスペリエンスを向上させることができます。
要約します
上記の手順を通じて、LaravelアプリケーションにローカルJSONファイルをロードおよび解析し、ブレードテンプレートにデータを動的に表示する方法を学びました。 Laravelのバックエンド処理能力とフロントエンドJavaScriptのインタラクティブ性と組み合わせた、単純なドロップダウンメニューであろうと、複雑なカスケードセレクターであろうと、強力でユーザーフレンドリーなフォームを構築できます。実際のプロジェクトでは、データサイズを考慮し、最も適切な負荷と相互作用戦略を選択してください。
以上がJSONデータを効率的に使用して、Laravel Bladeテンプレートにカスケードドロップダウンメニューを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

インターネットの解決方法404エラー:URLが正しいかどうかを確認します。ページを更新します。クリアブラウザキャッシュ:クロム:右上隅の3つのドット&gt;その他のツール&gt;クリアブラウジングデータ&gt; 「キャッシュされた写真とファイル」とGTを確認してください。クリアデータFirefox:右上隅の3つの水平線&gt;オプション&gt;プライバシーとセキュリティ&gt;クリアヒストリー&gt; 「キャッシュ」とGTを確認してください。 Safariを確認してください:皿

デジタル通貨の波では、1万人の校長を100万人に変えてファンタジーのように聞こえますが、正しい方法論を習得した参加者にとって、これは完全に不可能な道ではありません。このプロセスには、リスクと課題に満ちています。それが必要とするのは、一晩で金持ちになるというファンタジーではなく、厳密で体系的な運用戦略のセットです。この旅のすべてのステップは互いにリンクされており、定量的変化から定性的な変化まで、コアの駆動力を形成します。次の5つのステップは、そのようなとげのあるが成功への可能性のある道を示しています。

乱流通貨市場で利益を達成するために数万人の元を使用することはファンタジーではありません。それは非常に少数の人々に属する急な道です。この道は、伝統的な資金の安定性と保守主義を妨げ、究極のボラティリティと循環性を受け入れます。運ではなく、厳格で冷たくて複製可能な取引システムが必要です。このシステムは、市場の感情に対する正確な洞察、プロジェクトの基礎を深く掘り下げ、鋼鉄のような実行規律を組み合わせています。この目標を達成するために、トレーダーは普通の参加者からトップ捕食者への変革を完了する必要があります。

デジタル通貨の波の中では、多くの参加者が限られた校長を使用して富の大きな評価を達成することが夢です。 200,000の資本と100万の目標は手の届かないところにありません。それが必要とするのは、究極の取引分野、市場の匂いの鋭い感覚と寒い実行です。この方法論の中核は、長期的な価値投資ではなく、高強度で速い短期狙撃兵の戦いです。

デジタル通貨分野では、校長のサイズが成功の唯一の決定要因ではありません。プリンシパルが低い参加者にとって、効率的な複利戦略を習得し、時間と戦略の力を活用することも、資産の着実な評価を達成することができます。重要なのは、正しい考え方を採用し、厳密な運用分野を実行することです。以下は、低価格のユーザーが通貨サークルで着実に前進するのに役立つ7つのコア方法を導入します。

Binanceは、世界最大の暗号通貨交換です。その巨大な取引の深さ、豊富なビジネスエコシステム、高流動性により、スポット、契約、財務管理、BNBチェーンのパブリックチェーンなどのオールラウンドサービスを提供します。同時に、複数のセキュリティ対策とコンプライアンスの取り組みを通じて、ユーザー資産のセキュリティを確保し、透明な開発を促進するよう努めています。

World3のコアビジョンと製品の境界は何ですか?公的な進歩と検証は何ですか?人工知能の労働力は、世界の内部の実際のビジネスにどのようにマップされますか3? World3は、より広範な業界のエコシステムにどのように接続しますか?トークンエコノミクス($ wai)ガイド原則$ waiトークン割り当て割り当ての詳細$ waiトークンユーティリティアトリビリティおよびリリーススケジュールリリーススケジュールの概要world3の技術的差別は、同様のプロキシプラットフォームと比較してどこに反映されますか?開発者はWorld3をどのように統合する必要がありますか?複雑なバックエンドを構築する必要がありますか?最速のパス(コードなし)拡張パス(セミカスタム/完全なカスタマイズ)操作サイクルWorld3の生態系と業界の承認は信頼できますか?主なリスクとコンプライアンスの考慮事項

4Kの修復と国内映画の無料リソースを視聴するための推奨されるプラットフォームは次のとおりです。1。1905ムービーネットワークは、「Farewell My Concubine」および「Operation Red Sea」およびその他の映画の4K修復バージョンをカバーし、4K超透明な画質と映画とテレビ情報の両方をサポートする国立リソースライブラリを提供します。 2。SohuVideoは、古典的な香港映画の修復計画を開始し、「Hero's True Colors」などの古い映画の品質を最適化し、一部の映画は無料で見ることができます。 3.広告なしでDouyin Screening Hallで映画を見る、「Charlotte's Troubles」や「Wolf Warrior」シリーズなどの映画を提供し、1080pの画質をサポートします。 4. The Virtual Theater of the China Film Archiveは、監督のインタビューと学術分析を伴う、国内のクラシック映画の4K修復バージョンを定期的に発売します。 5. Huashu TVとTianyiビデオは、古典的な古い映画と赤いテーマビデオに焦点を当てています。
