PHP7.3 CakePHP4 initialize()メソッドでmust be compatible エラー
PHP7.3 に CakePHP4に入れて開発してたら下記のエラーがでて時間をくったので、その対応メモ。
エラーの内容
Model/Table/XXXTable.php
class XXXTable extends Table {
public function initialize ( array $config )
{
}
}
PHP Fatal error: Declaration of App\Model\Table\XXXTable::initialize(array $config) must be compatible with Cake\ORM\Table::initialize(array $config): void in /path/to/app/src/Model/Table/XXXTable.php
戻り値が違うよということで 継承元の initialize の戻り値に合わせて下記の修正をしたらOKでした。
Model/Table/XXXTable.php
class XXXTable extends Table {
public function initialize ( array $config ) : void
{
}
}
おわり。
さくら VPS Cent OS 7 で nginx PHP7 CAKEPHP3を動かす
基本的な設定から
標準OSにCentOS7があるので楽ちん。
- Locale対応
localectl set-locale LANG=ja_JP.UTF-8 - sshd
/etc/ssh/sshd_config
port xxxxx
PermitRootLogin no
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no - Firewall
sshのポートを変えたのでFirewallに22から変えたよという設定を。
vi /usr/lib/firewalld/services/ssh.xml
systemctl reload firewalld - web開発用ユーザ
useradd -u xxxx -g xxxx -M webuser
vi /etc/profile
export PATH=PATH:/usr/local/bin/
source /etc/profile
php 7 インストール
そう、CentOSは7でもyumで入るPHPのバージョンは7じゃない。
yum -y install yum-plugin-priorities
yum -y install epel-release
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum -y install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
yum --enablerepo=remi-php70 -y install php php-mbstring php-pear php-fpm php-pdo php-intl php-mysqlnd php-pecl-redis php-xml php-gd php-json
Composer
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/local/bin/composer
composer
nginx インストール
# vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx
repo baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
---
yum -y install nginx
nginx -t
systemctl start nginx
systemctl enable nginx
chown -R root:nginx /var/lib/php/*
Cakephp
Project 作成
composer self-update && composer create-project --prefer-dist cakephp/app
CentOSにPythonを確実にインストールする方法(さくらのVPS)
sakura VPS
# cat /etc/redhat-release CentOS release 6.8 (Final)
必要なパッケージをインストール
# yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel git
pyenvをインストール
cd /usr/local/src git clone https://github.com/yyuu/pyenv.git pyenv
パスを通す
vi /etc/profile.d/pyenv.sh export PYENV_ROOT="/usr/local/src/pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" source /etc/profile
anacondaのインストール
python3がなぜかうまくいかないので、python2。
標準で2.6.6が入っているので、切替が必要
pyenv install anaconda2-4.1.0 python --version pyenv versions pyenv global anaconda2-4.1.0 pyenv rehash
軽量PHPフレームワーク slim を使い始めのメモ
2倍早くなったと言われるPHP7が出て、すごく嬉しいんですが、「No Framework No Programing」に成ってしまったので、新しいフレームワークに手を出しています。RESTのウェブAPIを開発したかったので、とにかくシンプルで軽量なものということでSlimを選択。CakePHPくらいしかわからないので、非常に戸惑いましたが、徐々にわかってきたので、その記録を。
$app->get('/test/', function( $hoge ) {
echo 'Hello';
} );
これが標準的なようですが、
$app->get('/test', 'HogeController::hello');
これでもいいみたい。
CakePHPのHashのマッチャーに複数条件設定する方法
CakePHPのHashってめっちゃ便利ですよね。
foreachとかforが減ってソースがすっきりするので大好きです。
なかでもextractを良く使うんですが、だいたい条件指定することがほとんどです。
ドキュメントには [id=2] とか [id!=2] 程度のことしか書いて無くて、でも複数条件で検索したいことって結構多いんですよね。
どうしても複数条件を使いたかったので、ソース調べたら意外と簡単でした。
例えば
[Students] => Array ( [0] => Array ( [age] => 10 [sex] => 1 [name] => taro ), [1] => Array ( [age] => 10 [sex] => 2 [name] => hanako ) )
こんな配列から10才の男の子だけ取り出したいみたいな場合
Hash::extract( $students, '{n}[age=10][sex=1]' )
おわり。
php 5.4 インストール
phpは5.4をいれてみます。
phalconさんが5.3はダメよっていってたから。(Phalcon Install)
ところが、さくらのVPSの標準OS CentOS 6.7 (2015/08/28現在)のphpのバージョンは5.3。
cat /etc/redhat-release CentOS release 6.7 (Final)
レポジトリの追加
wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/6/x86_64/epel-release-6-5.noarch.rpm wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/6/x86_64/ius-release-1.0-10.ius.el6.noarch.rpm rpm -Uvh epel-release-6-5.noarch.rpm rpm -Uvh ius-release-1.0-10.ius.el6.noarch.rpm
yum install php54.x86_64 php54-cli.x86_64 php54-common.x86_64 php54-fpm.x86_64 php54-mbstring.x86_64 php54-pdo.x86_64 php54-devel.x86_64