0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

初心者がローカル環境にcakephp4を設定してみた

Last updated at Posted at 2020-04-12

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()

 

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?