🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1021閲覧

bladeで特定のURLの時だけ、HTMLの要素を表示したい。

kerokeroryu2631

総合スコア14

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/11/27 16:15

編集2020/11/27 16:53

bladeで特定のURLの時だけ、HTMLの要素を表示したいです。
特定のURLとは、「http://127.0.0.1:8000/articles/10/edit」などのように、「記事のID/edit」という形式のURLです。

記事のIDは連想配列でコントローラーからビューに渡しています。
ちゃんとビューに連想配列の値が渡っていることを、ddで確認しました(ddの結果は下記に記載)。
URLも、「http://127.0.0.1:8000/articles/10/edit」と形式的に正しく表示されております。

しかし、ビューのヘルパ関数を使った、条件分岐(「@if( url()->current() === url("/articles/{{ $article->id }}/edit"))」)がうまく働いてないと思われます。

どのようにヘルパ関数の(条件分岐の)箇所を書けば、うまく動くでしょうか?

ビュー

<!-- 画像投稿 --> @if( url()->current() === url("/articles/{{ $article->id }}/edit")) <div class="file-field medium"> <div class="btn btn-outline-default waves-effect float-left"> <span><i class="fas fa-cloud-upload-alt ml-3" aria-hidden="true"></i></span> <!-- input fileに初期値で、以前登録したファイルのパスを表示させるのは不可能。 --> <input type="file" name="image_url" value="{{ $article->image_url ?? old('image_url') }}" multiple> </div> </div> <h4>現行のサムネイル:</h4> <img class="img-thumbnail" src="{{ Storage::url($article->image_url) }}" alt="thumbnail"> @endif

コントローラー

public function edit(Article $article) { $tagNames = $article->tags->map(function ($tag) { return ['text' => $tag->name]; }); $allTagNames = Tag::all()->map(function ($tag) { return ['text' => $tag->name]; }); // return view('articles.edit', ['article' => $article]); dd($article); return view('articles.edit', [ 'article' => $article, 'tagNames' => $tagNames, 'allTagNames' => $allTagNames, ]); }

ddの結果

App\Article {#1376 ▼ #fillable: array:2 [▶] #connection: "mysql" #table: "articles" #primaryKey: "id" #keyType: "int" +incrementing: true #with: [] #withCount: [] #perPage: 15 +exists: true +wasRecentlyCreated: false #attributes: array:7 [▼ "id" => 10 "title" => "こんにちは" "body" => """ こんにちは。 朝ですね。 ニワトリが鳴いています。 """ "user_id" => 1 ] ・・・略・・・ }

試したこと

  • 色々ぐぐって、解決法を調べたが、有益な情報が得られず。下記のサイトもよく分かりませんでした。

http://cly7796.net/wp/php/try-the-path-and-the-url-of-the-helper-function-of-laravel/

  • 下記のように、任意パラメータの部分を{id?}と書いてみたが、if文の中のHTMLが表示されませんでした。

@if( url()->current() === url("/articles/{id?}/edit"))
https://readouble.com/laravel/5.5/ja/routing.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

@if構文の中では、普通のphpの文法を使わないといけないのではないでしょうか。
bladeの文法ではなく。

↓例えば、こんな感じ?

@if( url()->current() === url("/articles/" . $article->id . "/edit"))

外してたらすみません。

投稿2020/11/27 16:54

gpsoft

総合スコア1323

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kerokeroryu2631

2020/11/27 16:59

回答いただいた通りに、修正したら動きました! 本当にありがとうございます。
kerokeroryu2631

2020/11/27 17:02

@if構文の中は、普通のPHPなんですね。理解しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問