3
1

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 5 years have passed since last update.

phalcon php 開発備忘録

Last updated at Posted at 2017-01-20

phpのフレームワークでPhalconを今回始めて使うに当たって、引っかかる部分をまとめておきます。追記していくかもです。

phalcon 3.0.3
php 7.0.9
apache 2.4 + FCGI
maria-db
(開発環境は、WindowsでXAMPPです)
ちなみに、FCGIにしたものajaxなどでリクエストが頻発するとエラーになるのでFCGI化することで対応できました。
それらの論議が以下にあるのですがいつか詳しく解説します。
https://github.com/phalcon/cphalcon/issues/12056

  1. 他のモデルを扱うときのbelongsTo,hasManyについて
  2. FCGIについて

他のモデルを扱うときのbelongsTo,hasManyについて

まずは、phalconのドキュメントを見てみる。
https://docs.phalconphp.com/ja/latest/reference/model-relationships.html
特別なことをしていなければ、そのまま書いてある通りモデルにinitializeを用意して

models
public function initialize()
    {
        $this->hasMany(
            "id",
            "RobotsParts",
            "parts_id"
        );
    }

こんな感じにすれば良い。
hasManyやbelongsToで指定する先、上記の場合はRobotsPartsのモデルに
namespaceを設定している場合。

models
public function initialize()
    {
        $this->hasMany(
            "id",
            "\namespacename\RobotsParts",
            "parts_id"
        );
    }

となります。
ただし、これだとfind()したときに

find
X $models->\namespacename\RobotsParts 

というような指定はもちろんできないxため、alias を付けてあげます。

Robots
public function initialize()
    {
        $this->hasMany(
            "id",
            "\namespacename\RobotsParts",
            "parts_id",
            array( 'alias' => 'aliasname'    );
    }
controller_find
$mod = Robots::findfirst();
$mod->aliasname

また、alias付けない場合は、

alias_as
use namespacename\RobotsParts as aliasname

これでも上記同様に扱えます。

もう一つおまけ。
これはありえないケースかとおもうけど、テストデータでbelongsTo先となにかしらのidで結合させているわけですけど結合先に存在しなかった場合、そんなプロパティが無いですってエラーになります。
たとえば、

sample
var_dump($robpts);// これはOK
var_dump($robots->parts); //これはNG

NGとなった場合、あれ?belongsToをちゃんと書いてるのにおかしいな?って思うかもしれません。
原因はモデルのbelongsToではなくて、robotsにリレーションするpartsが存在しないということです。
存在しないならNullでええやん、ってことではなくて、プロパティが無いってエラーになるのでちゃんとチェックしましょう。(他に方法があるよって方は教えてください)

FCGI(FastCGI)

(ここから2018/12/04に更新)

FastCGIの設定です。phalconではほぼ必須と思ってください。

開発環境をXAMPPで行っているので、XAMPPの場合は、extra/httpd-xampp.confにphpの設定があるのでそこを変更します。
主に、phpの実行をfastCGI経由で行う設定となります。
phpの設定をコメントアウトしてFastCGIの設定を書きます。設定値はサンプルです。まあ、このくらいあればローカルテストでは問題ないでしょう。

以下よりダウンロードを行います。ちなみにXAMPPのapacheはwin32です。
apache download

nginxでは、nginx + php-fpmという別プロセスですが、apacheの場合は、apacheにロードするので起動、再起動はapacheのみでOK

httpd-xampp.conf

#
# PHP-Module setup
#
# LoadFile "C:/xampp/php/php7ts.dll"
# LoadFile "C:/xampp/php/libpq.dll"
# LoadModule php7_module "C:/xampp/php/php7apache2_4.dll"
# <FilesMatch "\.php$">
#     SetHandler application/x-httpd-php
# </FilesMatch>
# <FilesMatch "\.phps$">
#     SetHandler application/x-httpd-php-source
# </FilesMatch>
#
# PHP-FastCGI setup
#
LoadModule fcgid_module modules/mod_fcgid.so
<IfModule fcgid_module>
    FcgidInitialEnv PATH "C:/xampp/php"
    FcgidInitialEnv SystemRoot "C:/Windows"
    FcgidInitialEnv SystemDrive "C:"
    FcgidInitialEnv TEMP "C:/xampp/tmp"
    FcgidInitialEnv TMP "C:/xampp/tmp"
    FcgidInitialEnv windir "C:/windows"
    FcgidIOTimeout 64
    FcgidConnectTimeout 16
    FcgidMaxRequestsPerProcess 1000 
    FcgidMaxProcesses 3
    FcgidMaxRequestLen 8131072
    # Location php.ini:
    FcgidInitialEnv PHPRC "C:/xampp/php"
    FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
    <Files ~ "\.php$">
        Options Indexes FollowSymLinks ExecCGI 
        AddHandler fcgid-script .php
        FcgidWrapper "C:/xampp/php/php-cgi.exe" .php
    </Files>
</IfModule>

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?