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のトップ画面が表示される。

画像1

キャプチャ

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();」を打ち込んで実行。
今の時刻とあっていれば問題なし。

参考サイト

http://atomicbox.tank.jp/website/cakephp/1497/

いいなと思ったら応援しよう!