Элемент config.ini PhalconPHP хранится в виде строки - PullRequest
0 голосов
/ 03 октября 2018

У меня в файле config.ini есть элемент с начальными нулями item = "0001", когда я вызываю этот элемент в своем коде, Phalcon читает его как целое число и удаляет начальные нули, которые необходимо сохранить.Я пытался преобразовать его в строку, когда я его вызываю, но Фалкон, похоже, уже удалил начальные нули.Как я могу обойти эту проблему?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Phalcon\Config\Adapter\Ini внутренне использует PHP parse_ini_file.Phalcon по умолчанию передает значение INI_SCANNER_RAW в качестве третьего аргумента (т. Е. Режим сканера).В любом случае Phalcon всегда преобразует значения, используя собственный внутренний метод _cast.

. Вы можете расширить Phalcon\Config\Adapter\Ini и переопределить метод _cast, чтобы получить желаемый эффект:

<?php

class RawIntConfig extends \Phalcon\Config\Adapter\Ini
{
    protected function _cast($val)
    {
        /* If the value is numeric, we conserve it as is (ie a string).
           Otherwise we cast it normally. */
        if ( is_numeric($val) )
            return $val;

        return parent::_cast($val);
    }
}


/*
    Let's do a couple of tests.
*/

/* INI_SCANNER_RAW has no effect with Phalcon because of _cast(..).
   Note that INI_SCANNER_RAW is the default mode anyway. */
$config = new \Phalcon\Config\Adapter\Ini('config.ini', INI_SCANNER_RAW);
echo 'Using \Phalcon\Config\Adapter\Ini:<br>';
var_dump($config);

/* Expected behaviour when using parse_ini_file directly. */
$config = parse_ini_file('config.ini', true, INI_SCANNER_RAW);
echo 'Using parse_ini_file with INI_SCANNER_RAW:<br>';
var_dump($config);

/* Expected behaviour and is usable with Phalcon. */
$config = new RawIntConfig('config.ini');
echo 'Using RawIntConfig:<br>';
var_dump($config);

Вы получаете что-то вроде этого:

Test script output result

0 голосов
/ 18 октября 2018

Используйте INI_SCANNER_RAW для третьего параметра.

http://php.net/manual/en/function.parse-ini-file.php

...