【问题标题】:How do I set up a new class in the Phalcon PHP internals?如何在 Phalcon PHP 内部设置一个新类?
【发布时间】:2012-09-13 20:08:40
【问题描述】:

我决定通过制作一个简单的验证器来深入了解 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

我错过了什么?

【问题讨论】:

    标签: php-extension phalcon


    【解决方案1】:

    还需要将方法(函数)原型添加到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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      相关资源
      最近更新 更多