【问题标题】:PhalconPHP config.ini item keep as stringPhalconPHP config.ini 项目保留为字符串
【发布时间】:2018-10-03 17:25:31
【问题描述】:

我的 config.ini 中有一个前导零 item = "0001" 的项目,当我在代码中调用此项目时,Phalcon 将其读取为 int 并删除需要保留的前导零。当我调用它时,我尝试将它转换为字符串,但 Phalcon 似乎已经删除了前导零。我该如何解决这个问题?

【问题讨论】:

  • 你能接过电话吗?
  • @RedKen 我尝试过以许多不同的方式调用它。问题是当 Phalcon 读取它时,它总是被解释为一个整数。我似乎能够防止这种情况的唯一方法是在它前面放置一个非整数字符,然后在我的代码中删除该字符串字符,但这显然是一种非常不雅的方式!
  • 我同意你的观点,应该有更好的方法。您是否尝试将第二个参数设置为 true ?让 iniConfig = parse_ini_file(filePath, true); ?
  • @RedKen 抱歉,我已经有一段时间没有设置它了。我在哪里可以找到那个?

标签: php string phalcon ini


【解决方案1】:

第三个参数使用INI_SCANNER_RAW

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

【讨论】:

    【解决方案2】:

    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);
    

    你会得到这样的东西:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多