CAKEPHP4 で REST の設定をするときに注意すること

同じアプリケーション(プロジェクトかな?)に対してAPIをコールして返すみたいなRESTの機能を開発することをよくやります。CAKEPHPを使っているので、この設定なんかも非常にかんたんなんですが、APIのリクエストがPOSTのときにうまくいかなかったので、そのメモ。

 

src/Application.php内でCSRF対策で

->add(new CsrfProtectionMiddleware([

'httponly' => true,

]));

というのがあって、これが原因でした。

 

CSRFの対策をしないよという場合はコメントアウトしちゃえばいいんですけどね。

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があるので楽ちん。

  1. Locale対応
    localectl set-locale LANG=ja_JP.UTF-8
  2. sshd
    /etc/ssh/sshd_config
    port xxxxx
    PermitRootLogin no
    RSAAuthentication yes
    PubkeyAuthentication yes
    PasswordAuthentication no  
  3. Firewall
    sshのポートを変えたのでFirewallに22から変えたよという設定を。
    vi /usr/lib/firewalld/services/ssh.xml
    systemctl reload firewalld
  4. 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 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 

opencv インストール

conda install opencv

動作確認

# python
>>> import cv
>>> import cv2

エラーが出なければOK

ImportError: No module named cv というエラーがでることが良くあるみたい。
自分もこれにかなりてこずりました。

軽量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 php 5.4 をインストール

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


http://qiita.com/utano320/items/36b6eac2bbd5bb5657f6