2020/4/10
初投稿でmarkdownよくわからず、見苦しいところはご了承ください。自分のメモのために。
お仕事させていただいている会社が皆さんMacで、Macへのローカル開発環境構築のマニュアルはあったがWindowsはなく、かつcakePHP4の記事はまだあまりなく苦労したので、メモ書きしておきます。
ローカル開発環境 xampp上に設定。
※公式ページのcakephp4チュートリアルと、dotinstall(cakephp3)を参考に行いました。
事前準備
・xamppのインストール
https://qiita.com/rana_kualu/items/50f9f5735321fe995ff5
・composerのインストール
https://book.cakephp.org/4/ja/installation.html#composer
・php7.4のインストール
https://aulta.co.jp/archives/6919
Cakephp4のプロジェクト作成
(ここではプロジェクト名をnewprojectとします)
c:\xampp\htdocs\newprojectにて、以下実行
$ composer create-project --prefer-dist cakephp/app:4.* newproject(プロジェクト名)
※ここでエラーとなった場合は、c:\xampp\php\php.iniの修正
;extension=intl
↑コメントを外す
http://localhost/newproject/ に接続 cakephp4の画面が表示されたらOK
DB設定
$ mysql -u root
→ MariaDBにつながるので、データベース作成
(ここではデータベース名:new_db、ユーザ名:dbuser、パスワード:testで設定)
create database new_db;
grant all on new_db.* to dbuser@localhost identified by 'test';
use new_db
config/app_local.phpを修正
DataSourcesのusername,password,databaseを、作成したデータベースの設定に修正
'Datasources' => [
'default' => [
'host' => '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' => 'dbuser',
'password' => 'test',
'database' => 'new_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),
],
app.phpの修正
DataSourcesの
//'encoding' => 'utf8mb4',
のコメントをはずす
サーバ起動
xamppのappache起動
ブラウザにて、http://localhost に接続
※DBが接続成功していることを確認する
各テーブルのbake(モデルの作成)
mysqlにてcreate table(テーブル作成)後に、bakeする。
$ bin/cake bake model (テーブル名)
→ /src/Model/Table,Entity配下にphpファイルができる
基本 controller、viewの作成メモ
templates配下に、Users フォルダ作成→index.php新規作成
<h1>user info</h1>
<ul>
<?php foreach ($users as $user) : ?>
<li><?= h($user->name); ?></li>
<?php endforeach; ?>
</ul>
src/Controller配下に、UsersController.php
<?php
namespace App\Controller;
class UsersController extends AppController
{
public function index()
{
$users = $this->Users->find('all');
$this->set(compact('users'));
}
}
→ブラウザで確認
http://localhost:8765/Users/
〇ルーティングの設定
/Users/ではなく、ただの/で接続できるようにする設定方法
config/routes.php を修正
// $builder->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);
$builder->connect('/', ['controller' => 'Users', 'action' => 'index', 'home']);
独自レイアウトの設定する場合
templates/layout配下に my_layout.php を新規作成する。
<!DOCTYPE html>
<html lang="ja">
<head>
<?= $this->Html->charset() ?>
<title>
<?= $this->fetch('title') ?>
</title>
<?= $this->Html->css('styles.css') ?>
</head>
<body>
<section class="container">
<?= $this->fetch('content') ?>
</section>
</body>
</html>
レイアウト変えたいController側に以下を追記 例)UsersController.php
※setLayoutの行
public function index()
{
$users= $this->Users->find('all');
$this->viewBuilder()->setLayout('my_layout');
$this->set(compact('users'));
}
Cakephp3と4の違うところ、エラーになるので修正したところ
cakephp4のチュートリアルがまだcakephp4に対応されてない部分があったり、
dotinstallのcakephp3の通りにやっても4ではうまくいかなかったところのメモです。
・newEntity
でエラーとなり、newEmptyEntity
に書き換えればOKだった
・$this->Form->input('title');
だとうまくいかず、以下だと上手く動いた
$this->Form->control('title', ['label' => 'ああああ']);
$this->Form->control('title');
・$this->request->data
がエラー 以下でOK
$this->request->getData()
・$this->request->session()
がエラー 以下でOK
$this->getRequest()->getSession()