XAMPPでCakePHPのインストール、DB連携まで。
■環境構築前の設定
コマンドラインからcakePHPをインストールしようとすると、ext-intlが見つからないというエラーになる。
XAMPPだとデフォルトでext-intlが無効化されているので有効化してあげる必要がある。
intl拡張モジュールの有効化
xampp環境下のphp拡張モジュールを有効化するためには、php.iniをカスタマイズする。
php.iniをエディタで開くと、intl拡張モジュールに関する設定がコメントアウトされており、システムに読み込まれていなかった。
;extension=intl
ntl拡張モジュール有効化のための手順は下記の通り。
php.iniのintl拡張モジュール設定のコメントを外す extension=intl
apacheを再起動する
ここを参考にしました。
■CakePHPインストール
コマンドラインでcakephpをインストールしてみる
以下のコマンドで最新版がインストールされる。
composer create-project --prefer-dist cakephp/app my_app
# cakephp/app ディレクトリ名
過去のverをインストールしたい場合は、以下のように書く。
例:3.8をインストールする場合
composer create-project --prefer-dist cakephp/app:3.8.*
成功すると最後に、下記の質問が出てくる。
Set Folder Permissions ? (Default to Y) [Y,n]?
(フォルダ権限の設定 ? (デフォルトはY) [Y,n]?)
自動でパーミッションの設定をしてくれるらしい。
YでOK。
データベース作成~app.phpの設定
CakePHPをインストールし、localhost/インストールしたディレクトリ名でアクセスすると、CakePHPのトップ画面が表示される。
Databaseの項目がエラーになっている。
エラーを解消するため、DBの作成と設定を行う
データベースの作成
XAMPPからphpMyAdminを開く。
SQL文を入力する画面で、以下を入力してDBを作成する。
create database データベース名;
データベースの設定
config>app.phpを開く。
以下の部分の設定を変えていく
'Datasources' => [
'default' => [
'className' => Connection::class,
'driver' => Mysql::class,
'persistent' => false,
'host' => 'localhost', /XAMPPはlocalhostがデフォルトなはず。
/*
* CakePHP will use the default DB port based on the driver selected
* MySQL on MAMP uses port 8889, MAMP users will want to uncomment
* the following line and set the port accordingly
*/
//'port' => 'non_standard_port_number',
'username' => 'root', /XAMPPだとrootがデフォルトなはず。
'password' => '1234', /自分で決めたパスワード
'database' => 'CakeDb', /作成したDB
設定し、CakePHPのトップ画面Databaseのところのエラーが消えて緑色になっていればOK。
以上でDB連携は完了。
.envファイル作成
CakeBlog>config>.env.sample をコピーし.envファイルに名前を変更。
内容を以下のように変更する
export APP_NAME="CakeBlog" / CakePHPインスト時につけたディレクトリ名
export DEBUG="true"
export APP_ENCODING="UTF-8"
export APP_DEFAULT_LOCALE="ja_JP"
export APP_DEFAULT_TIMEZONE="Asia/Tokyo"
export SECURITY_SALT="dea4483a3f06bb9feb46c2ca7295c5068db2e10eef6b308dff9
SECURITY_SALTは、configディレクトリ内のapp_local.phpの中に記述されているので、これをコピペする
もし記述されていなかったら、以下のサイトで生成したものを貼り付けてもよい。
https://tool.byeto.jp/dist/createsecuritysalt
'Security' => [
'salt' => env('SECURITY_SALT', 'dea4483a3f06bb9feb46c2ca7295c5068db2e10eef6b308dff94e55ae715a1b8'),
],
bootstrap.phpの.envファイルを読むこむようにする
bootstrap.phpを開き、61行目あたりにある
if (!env('APP_NAME') && file_exists(CONFIG . '.env')) {
$dotenv = new \josegonzalez\Dotenv\Loader([CONFIG . '.env']);
$dotenv->parse()
->putenv()
->toEnv()
->toServer();
}
がコメントアウトされているので、解除する。
DB接続の設定
Cakephpディレクトリ、app>config>app.phpの
・host = MySQL設定画面の一番下に記載されている(mysql・・・・.xserver.jp)
・username = アクセス権所有ユーザ
・password = アクセス権所有ユーザーのパスワード
・database = データベース名
に、XserverのMySQL設定の情報を入力する。
(username,passwordは、phpmyadminにログインするときにも使う。)
config/app.php
'Datasources' => [
'default' => [
'host' => 'mysql・・・・.xserver.jp',
/*
* CakePHP will use the default DB port based on the driver selected
* MySQL on MAMP uses port 8889, MAMP users will want to uncomment
* the following line and set the port accordingly
*/
//'port' => 'non_standard_port_number',
'username' => 'ユーザー名',
'password' => 'パスワード',
'database' => 'DB名',
/**
* If not using the default 'public' schema with the PostgreSQL driver
* set it here.
*/
//'schema' => 'myapp',
/**
* You can use a DSN string to set the entire configuration
*/
'url' => env('DATABASE_URL', null),
],
■タイムゾーンの設定
初期では海外の設定になっているはずなので、修正する。
タイムゾーンは3つ設定がある。それぞれ確認、変更方法を以下にまとめる。
基本はCakePHPの設定を行っていれば問題はなさそうだが、それでもタイムゾーンの設定がおかしければ、PHPとMySQLのタイムゾーンも確認しよう。
CakePHP
config/app.phpにある。以下のように変更すればOK
/ app.php
'App' => [
'defaultLocale' => env('APP_DEFAULT_LOCALE', 'ja_JP'),
'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', '+09:00'),
],
'Datasources' => [
'default' => [
'timezone' => '+09:00',
],
],
これをやっておかないと、DBにテーブルを作り、createdやmodifiedカラムにtimestampで時間を入れると、9時間遅れて表示されてしまう。
PHP
<?php phpinfo(); ?>をどっかのview画面に貼り付けて、出てきた長い表が出てくるので、date.timezoneで検索する。
「Asia/Tokyo」でなければ、XAMPPのapache>config>php.iniを開いて
またdate.timezoneで検索、Asia/Tokyoに書き換える。
MySQL
PHPmyAdmin上の、sqlタブで、「SELECT NOW();」を打ち込んで実行。
今の時刻とあっていれば問題なし。
参考サイト