CakePHPでVue.jsを利用する方法

のえる のえる
2021.01.12

どうも、のえるです。

 

CakePHPはテンプレート機能も備えた便利なフレームワークですが、リクエスト・レスポンスの一般的な仕組みになっています。
そのため、シングルページアプリケーション(SPA)を実現するには工夫が必要です。

 

そこで今回は CakePHP + Vue.js によるSPA化の一例をご紹介します。

はじめに

今回の環境は下記のとおりです。

 

OS: CentOS 7.4
nginx: 1.18.0
PHP: 7.4.11
npm: 6.14.8
node: v10.15.0
CakePHP: 4.1.0

 

composer実装済み

インストール・設定

まずはベースとなるCakePHPをインストールしましょう。

 

今回インストールするのは CakePHP4 となります。

 

インストールが終わったら、プロジェクトの直下に vue フォルダを作り、その中に Vue.js をインストールします。
その際の構成は下記のとおりです。

 



 

続いて、layoutファイルに Vue.js の出力するファイルを読み込むように書き加えます。

 

そして、トップ画面のテンプレートファイルにも書き加えていきましょう。

 

これで画面側が Vue.js になります。

 

そして、最終的に下記のような構成になります。

 



 

あとは Vue.js でビルドしたものを webroot に配置していけば完了です。

データのやりとりについて

データの送受信

CakePHPではサーバーからテンプレートへとシームレスにパラメータを渡すことができますが、今回の仕組みの場合はテンプレートが初回のみとなりますので、そのままではできません。
そこでデータのやり取りを工夫していきます。

 

具体的には APIの実装 によってデータをやり取りできます。

 

まずはAPIのためにルーティングを設定します。

 

そしてプログラムを記述していきます。

 

これで Vue.js から非同期でデータを取得することができます。

 

CakePHP4で非同期のデータが送れない場合

CakePHP4ではフォームデータを送信する際、CSRFが必須になっているようです。
ただ、Formを毎回作らなくても、CSRFだけ出力する方法がありますのでご紹介します。

 

 

このCSRFをパラメータに追加してあげることでうまくデータを送ることができます。

※デフォルトのパラメータ名は _csrfToken ですが、変更することも可能です(詳細(公式))。

注意

まず前提となる知識ですが CakePHP と Vue.js のそれぞれで ルーティング機能 が存在しています。
(router.php と router/index.js)

 

そのため、同じURLを実装すると、URLから直接アクセスされた場合、想定しない動きをします。
(PHPのルーティング機能が優先されます)

 

画面側のルーティングとの重複には十分に注意しましょう。

さいごに

CakePHP と Vue.js の組み合わせに関する情報がほとんど見つかりませんでしたので書いてみました。

 

この記事からもっと増えればいいなと思います。

スポンサーリンク

POPULAR

のえる

のえる

Full-stack Developer