コンテンツにスキップ

Php

  • PHP

インストール

Mac

1
brew install php

Composerは公式参照.

CakePHP

起動しようとしたときのエラー対応

You must enable the intl extension to use CakePHP

1
2
You must enable the intl extension to use CakePHP. ~~ requirements.php on line 31
Fatal error: You must enable the intl extension to use CakePHP. in C:\xampp\htdocs\my_app\config\requirements.php on line 31

解決方法: 「php.ini」にある;extension=intlを開放してXAMPP再起動.

No such file or directory ~~ index.php on line 31

自分のCakePHPアプリのディレクトリに移動してcomposer update.

An Internal Error Has Occurred.

config/app.phpのデバッグレベルを以下のように変更.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
    /*
     * Debug Level:
     *
     * Production Mode:
     * false: No error messages, errors, or warnings shown.
     *
     * Development Mode:
     * true: Errors and warnings shown.
     */
    'debug' => filter_var(env('DEBUG', true), FILTER_VALIDATE_BOOLEAN),

Security::setSalt() must be of the type string, null given, called in~~

envの第二引数に32文字指定.

1
2
3
    'Security' => [
        'salt' => env('SECURITY_SALT', 'dfc123c6c22d84f4bc12273f3df67c6ae55009696e4126b36ac2f755778faccc'),
    ],

Laravel

PHPComposerのインストールまで済ませていること.

APIを立ち上げる

  • sail php artisan serveでサーバーを立ち上げる

APIのエラー処理

Dockerのキャッシュをクリアして再ビルド

1
./vendor/bin/sail build --no-cache

Laravel Sail

Laravel sailでコンテナを再構築

1
2
./vendor/bin/sail build --no-cache
./vendor/bin/sail up

Laravel sailでプロジェクトを初期化

sail用の初期化. laravel-test-sampleの部分は新規作成したいプロジェクト名にする

1
curl -s "https://laravel.build/laravel-test-sample" | bash

.bashrcまたは.zshrcにエイリアスを設定する.

1
alias sail='[ -f sail ] && sh sail || sh vendor/bin/sail'

データベースはconfig/database.phpで設定する. 初期設定はmysql. docker-compose.ymlmysqlを潰してsqliteにしてもよい. このときsqliteのファイルは初期設定だとdatabase/database.sqliteに生成される.

(sail updockerを立ち上げてから)次のコマンドでデータベースにシードを発行する.

1
sail artisan migrate --seed

Laravel sailでデータベースのコンテナに入ってMySQLにログインする

MySQLコンテナに入る.

1
./vendor/bin/sail exec mysql bash

MySQLに接続する. パスワードは.envに書いたDB_PASSWORDの値を入力.

1
mysql -u sail -p

sailユーザーがいない場合があるため, その場合はrootでログインする.

1
mysql -uroot

ログインできたらデータベースの存在を確認.

1
SHOW DATABASES;

必要に応じてキャッシュをクリアする.

1
2
./vendor/bin/sail artisan config:clear
./vendor/bin/sail artisan cache:clear

Laravel sailの初期設定のMySQLsailユーザーがいない場合に作成する

docker-compose.ymlで設定を追加する.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
mysql:
  image: 'mysql/mysql-server:8.0'
  ports:
    - '${FORWARD_DB_PORT:-3306}:3306'
  environment:
    MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
    MYSQL_DATABASE: '${DB_DATABASE}'
    MYSQL_USER: '${DB_USERNAME}'
    MYSQL_PASSWORD: '${DB_PASSWORD}'
  volumes:
    - 'sail-mysql:/var/lib/mysql'
    - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
    - './mysql-init:/docker-entrypoint-initdb.d' # これを追加

上記追加に合わせてディレクトリ・ファイルを追加する.

1
2
mkdir mysql-init
touch create-sail-user.sql

create-sail-user.sqlに次の内容を書き込む.

1
2
3
CREATE USER IF NOT EXISTS 'sail'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'sail'@'%';
FLUSH PRIVILEGES;

コンテナを再構築して起動する.

1
2
sail down --rmi all -v
sail up -d

ユーザーsailでログインできるか確認する.

必要に応じて次のSQLを実行する.

1
2
SELECT user, host FROM mysql.user;
SELECT user, host FROM mysql.user WHERE user = 'sail';

OpenAPI

REPL(tinker)

1
2
3
4
php artisan tinker

$user = App\Models\User::where("id", "=", "3500")->get();
$orders = App\Models\OrderHeader::where("id", "<", "3500")->get();

起動

1
2
mysql.server start
php artisan serve

既にあるプロジェクトの導入

  • .env作成
  • データベース作成
1
2
3
4
composer install
php artisan migrate
php artisan key:generate
php artisan serve # 起動

開発環境ではhttp, 本番ではhttpsで接続

  • 参考
  • app/Providers/AppServiceProvider.phpを編集
1
2
3
4
5
6
7
8
use Illuminate\Support\Facades\URL;

    public function boot()
    {
        if (config('app.env') === 'production') {
            \URL::forceScheme('https');
        }
    }

マイグレーション

1
sail artisan migrate

ユーザー作成

  • php artisan tinkerを実行
  • REPLで次のように書く
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
$user = new User;
$user->name = "ユーザー名";
$user->email = "メールアドレス";
$user->password = Hash::make('パスワード');
$user->save();

$user = new User;
$user->name = "test";
$user->email = "test@phasetr.com"; # このメールアドレスは存在しない
$user->password = Hash::make('test');
$user->save();

$user = new User;$user->name = "user";$user->email = "user@phasetr.com";$user->password = Hash::make('test');$user->save();
$user = new User;$user->name = "admin";$user->email = "admin@phasetr.com";$user->password = Hash::make('test');$user->save();
$user = new User;$user->name = "shopper";$user->email = "shopper@phasetr.com";$user->password = Hash::make('test');$user->save();
1
App\Models\User::first();

認証