3

簡単なバリデーターを作成することで、Phalcon の内部に足を踏み入れることにしました。私は他のバリデーターの定義にほぼそのまま従いました。phalcon.c と phalcon.h には次のようなものがあります。

phalcon.c:
zend_class_entry *phalcon_mvc_model_validator_stringlength_ce;
...
PHALCON_REGISTER_CLASS_EX(Phalcon\\Mvc\\Model\\Validator, StringLength, mvc_model_validator_stringlength, "phalcon\\mvc\\model\\validator", phalcon_mvc_model_validator_stringlength_method_entry, 0);

phalcon.h:
extern zend_class_entry *phalcon_mvc_model_validator_stringlength_ce;
...
ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_mvc_model_validator_stringlength_validate, 0, 0, 1)
    ZEND_ARG_INFO(0, record)
ZEND_END_ARG_INFO()
...
PHALCON_INIT_FUNCS(phalcon_mvc_model_validator_stringlength_method_entry){
    PHP_ME(Phalcon_Mvc_Model_Validator_StringLength, validate, arginfo_phalcon_mvc_model_validator_stringlength_validate, ZEND_ACC_PUBLIC)
    PHP_FE_END
};

実行時に次の警告が表示されます。

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/phalcon.so' - /usr/lib/php5/20090626/phalcon.so: undefined symbol: zim_Phalcon_Mvc_Model_Validator_StringLength_validate in Unknown on line 0

私は何が欠けていますか?

4

1 に答える 1

2

また、メソッド (関数) プロトタイプを phalcon.h に追加する必要があります。

https://github.com/phalcon/cphalcon/blob/master/dev/phalcon.h#L391

.c ファイルを config.m4 に追加します (Unix/Linux プラットフォームを使用している場合):

https://github.com/phalcon/cphalcon/blob/master/dev/config.m4#L5

その後、完全な再コンパイルが必要です。

phpize --clean
export CFLAGS="-g -O2 -fno-delete-null-pointer-checks"
phpize
./configure --enable-phalcon
make
sudo make install
于 2012-09-13T21:14:36.207 に答える