エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども

      2023/12/28

CakePHP3で HtmlHelperを使ってリンクを設定する方法をまとめてみた

 

Webサイト開発にはリンクは付き物。その設定方法を再確認してみた

 
CakePHP3で開発するサイト、アプリに限らず、Webサイトにはリンクがつきものです。
 
というわけで、この記事では、CakePHP3の HtmlHelperを使ってリンクを設定することに特化して解説していきます。
 
なお、この記事は、CakePHP3用に書いたものですが、確認したところ CakePHP4でも記述形式は同じですので、CakePHP4の記事として読み替えていただいて問題ありません。
 
違う点があるとすれば、テンプレートファイルが「***.ctp」か「***.php」か、といったところでしょうか。(テンプレートが配置されているフォルダの場所も異なりますね。)
 
 
【参考】CakePHP3 Cookbook HtmlHelper
https://book.cakephp.org/3.0/ja/views/helpers/html.html
 
【参考】CakePHP3 Cookbook UrlHelper
https://book.cakephp.org/3.0/ja/views/helpers/url.html
 
 
【参考】CakePHP4 Cookbook HtmlHelper
https://book.cakephp.org/4/ja/views/helpers/html.html
 
【参考】CakePHP4 Cookbook UrlHelper
https://book.cakephp.org/4/ja/views/helpers/url.html
 
 
フォームを作成する際に利用する FormHelperについては下記の記事を参考にしてください。
CakePHP3のForm Helperの使い方のまとめ
 
また、JavaScript、cssを読み込む設定については下記に記事を書いていますので参考にしてください。
CakePHP3でページごとに読み込むJavaScript、CSSを変える処理の解説
 
 

CakePHP3の HtmlHelperの Link設定の基本形

 
まず、CakePHP3の HtmlHelperの Link設定の基本形です。
 

 
 
「アンカーテキスト」は、「<a></a>」で囲まれたリンクが設定される個所のテキストです。
 
具体的には、下記のように記述すると、その下にある HTMLが生成されます。
 

 
「/samples/view/1」の指定は、「/」から記述を始め、ドキュメントルートからのパスを指定します。
相対パスの設定はできません。
 
 

CakePHP3の HtmlHelperのリンクに URLを指定する場合

 
URLを指定してリンクを設定する方法は、基本形でパスを指定するのと同様に 2つめのパラメーターに URLを指定することで設定できます。
 

 
 
URLを記述する方法は、前項の基本形の設定を理解していれば分かるだろうとも思いますが、Cookbookに説明がないため、私はこの方法が分からずかなりの期間悩んでいました。
 
 

アンカーリンクを翻訳対象とする方法

 
アンカーテキストの部分を翻訳対象にする場合は下記の様に「__(" ")」でテキストを囲みます。
 

 
CakePHP3の日本語翻訳機能については下記の記事を参考にしてください、。
CakePHP3のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
 
 


 
 

HtmlHelperで Controller、Actionを指定してリンクを設定する方法

 
前項のリンク設定は基本形ではあるものの、一般的にはこちらの Controller、Actionを指定してリンクを設定するほうが多いでしょう。
 

 
 
cakephp3の規約では、プラグイン名、コントローラー名は「パスカルケース(頭文字を大文字にする)」で、アクション名は「キャメルバック(1単語目はすべて小文字で2単語目以降は頭文字を大文字にする)」となっていますので、「"controller"=>"UsersLinks","action"=>"newView"」と記述することが正しい記述方法です。
 
ですが、Controllerも Actionも「UsersLinks」のほか、「usersLinks」「users-links」と記述しても正しいリンクが設定されます。
 
CakePHP3 Cookbook CakePHPの規約
https://book.cakephp.org/3.0/ja/intro/conventions.html
 
 
"plugin"=>""」「"controller"=>""」は任意です。
設定しない場合は、現在のプラグイン、コントローラーがデフォルトとして設定されます。
 
また、プラグインが使用されているページから使用していないページにリンクを貼る場合は、「"plugin"=>null」もしくは「"plugin"=>false」を記述します。
 
 

トップページにリンクを設定する方法

 
トップページ(そのサイトのドキュメントルートのページ)にリンクを貼りたい場合は、下記のように null(もしくは false)を設定します。
 

 
前項で書きましたが、「null」の代わりに「false」と記述しても問題ありません。
 
また、「"action"=>"/"」の部分は、「"action"=>null」としても問題ない場合が多くあります。
ただ、ルーティングの設定によっては正しくトップページにリンクされない場合がありますので、「"action"=>"/"」としておくほうが無難なようです。
コントローラーの指定も「"controller"=>"/"」としても問題ありません。
 
 
また、トップページにリンクを貼る際、ルーティングでトップページに指定しているコントローラー、アクションを指定する方法もあります。
 

 
上記のように「/config/routes.php」に設定してある場合は、下記のようにそのコントローラー、アクションを指定することでトップページにリンクが設定されます。
 

 
ただ、この記述方法の場合は、ルーティングのトップページの設定を変更した場合に、リンク先がトップページではなくなってしまいますので注意が必要です。
 
 

リンクを絶対 URLで記述する場合は「"_full"=>false」を指定

 
また、生成されるリンクを絶対 URLにしたい場合は「"_full"=>true」を追加します。(デフォルトは「"_full"=>false」となっています。)
 

 
 

リンクのパラメーターはいくつでも追加できる

 
前項のパラメーターは「12345」だけでしたが、パラメーターは複数設定することもできます。
例えば、下記は検索のパラメーターとして 2つの条件を付与する想定です。
 

 
また、上記のパラメーターを受け取るアクション側は下記の様になります。
 

 
また、パラメータの取得に関しては下記にも記事を書いていますので、併せて参考にしてください。
CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法
CakePHP4で現在処理しているコントローラー名、アクション名を取得する方法
 
 

リンクに URLクエリパラメータを指定する方法 2023.12.28 追記

 
リンクに URLクエリパラメータを指定したい場合は、キーとして「?」を指定し、値を配列で指定します。
 

 
 

リンクにパラメータと URLクエリパラメータの両方を指定する方法 2023.12.28 追記

 
先に紹介したパラメータと URLクリエパラメータの両方を指定することも出来ます。
 

 
 

リンクに class、id、targetを指定する場合

 
リンク設定の基本形に対して、class、id、targetを指定する場合は、3つ目のパラメーターとして配列で指定します。
 
具体的には、下記のように記述すると、その下にある HTMLが生成されます。
 

 
 
最初に解説をしたリンク設定の基本形の場合も 3つ目のパラメータとして指定をします。
 

 
 

リンクに JavaScriptの確認ダイアログを表示する設定

 
CakePHP3ではレコードを削除するリンクをクリックすると表示される「このレコードを削除しますか?」のダイアログですが、これをリンクに設定する方法が用意されています。
 
下記のように 3つ目のパラメーターとして「"confirm"=>""」を指定します。
 

 
 
また、3つ目のパラメーターとして「class」などの指定をしている場合は、3つ目のパラメーターの配列の中に追記します。
 

 
 


 
 

画像にリンク設定をする方法

 
リンクを設定するアンカーテキスト部分に画像を設定するときは下記のように設定します。
 

 
ポイントは、3つ目のパラメーターとして設定する「"escape"=>false」です。
これを追加することで、1つ目のパラメーターとして設定している画像の設定がエスケープされずに処理されます。
 
 
"escape"=>false」を設定しないと、画像のリンク(imgタグ)がエスケープ処理されるため、imgタグがタグとして認識されなくなります。
 

 
 

画像にリンクを設定するけどエスケープする範囲を限定する方法

 
前項で設定する「"escape"=>false」は、リンクの属性もエスケープ対象としてしまいます。
そのため、「"escapeTitle"=>false」を使い、タイトルだけをエスケープすることもできます。
 

 
 
"escape"=>false」のままだと、下記のように「title="hi "howdy""」の部分が正しくエスケープされていませんので、想定している title属性の設定になっていません。
 

 
 

mailtoのリンクを設定する方法

 
mailtoのリンクを設定する場合は下記の様に設定します。
 

 
この mailtoの設定方法は、最初に紹介したリンク設定の基本形の理解ができていれば、この記述方法にたどり着ける可能性はあるようにも思いますが、URLのリンクを設定する方法と同じく、Cookbookに設定方法が記載されていないため、かなり悩みました。
 
そして、この「mailto」のリンク設定方法を知ったときの驚きで、この記事を書いたと言っても過言ではありません。
 
 

テキスト内のメールアドレスに自動的に mailtoリンクを設定する方法

 
前項の設定は、あらかじめメールアドレスを表示することが分かっている個所に mailtoのリンクを設定する方法です。
 
CakePHP3では、それに加えて、文章内にあるメールアドレスに自動的に mailtoのリンクを設定する方法も用意されています。
 

 
上記のように、メールアドレスを含む文章を「autoLinkEmails()」に通すことで自動的に mailtoのリンクを設定してくれます。
 
この「autoLinkEmails()」は、非常に便利な機能ですが、個人的には前項の普通の mailtoのリンクの解説を Cookbookに書いていてほしかったです...
 
 

アンカーテキストに HTMLタグを入れたい場合 2023.12.28 追記

 
アンカーテキストの中に HTMLのタグを入れたい場合は、アンカーに画像を使用したい場合と同じく「"escape"=>false」を使用します。
(linkの処理はデフォルトでは「"escape"=>true」となっていて、デフォルトのままでは HTMLタグはエスケープ(無効化)されます。)
 

 
 

CakePHP3の関連記事

CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールする
CakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
 
その他の「CakePHP3」に関する記事一覧
 
 

 - CakePHP 3.x 4.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつテンプレートファイルがどこにあるか、設定情報ファイルがどこにあるか、を説明しつつカスタマイズの方法を解説します。

CakePHP 2.3でOn Duplicate Key構文を実装

CakePHPで On Duplicate Key構文を Queryを利用して実装する方法をサンプルソース付きで解説します。

CakePHP3で静的ページの作成は webrootか pagesを使う。トップページを参考に解説
CakePHP3で静的ページの作成は webrootか pagesを使う。トップページを参考に解説

CakePHP3で静的なページを設置する場合の方法(webrootとpagesとを活用する方法)を解説。pagesの解説はデフォルトのトップページがどう表示されているかを参考に解説。ルーティングの機能も。

MySQL、CakePHP 2.3で「tinyint(1)」の Boolean型の動作を再確認

MySQL+CakePHPの環境で「tinyint(1)」を利用する際の動作を検証。「tinyint(1)」の Boolean型について CakePHPでは自動処理が実施されていることを確認しました。

CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説
CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説

CakePHP3で定数や共通で使う変数をまとめて設定し、プログラム内で読み込む方法を、bootstrap.phpに直接記述する方法と定数ファイルを分ける方法の3つの方法で解説。

CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説
CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説

CakePHP3にjQuery UIのDatePickerを実装する手順を説明。併せて、デイトピッカーを設置に関連するCakePHP3の解説と、テーマを変更したり、表記を変更するカスタマイズする方法なども紹介。

CakePHPで同一テーブル内の値を比較する条件でレコードを取得する方法
CakePHPで同一テーブル内の値を比較する条件でレコードを取得する方法

CakePHPの同一テーブルにある項目の値を比較し条件に合致するレコードを取得する方法を解説。[”項目名”=>”値”]ではなく[”項目名 = 項目名”]と書くところがポイント。

CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合

ID以外のカラムでアソシエーション(連携)させるための考え方とサンプルソースを用いての説明を行っています。

CakePHP 2.3 主キー(ID)以外のキーで更新方法 updateAll

主キー(ID)以外のカラムをキーとして更新する方法、updateAllの使い方をサンプルを用いて解説します。

CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合の詳細ページの注意点

ID以外のカラムでアソシエーション(連携)させて詳細ページを表示させる際の考え方と注意点をサンプルソースを用いて解説しています。