"/e 修饰符在使用 Symfony 1.4 调用 preg_replace() 时已被弃用

问题描述 投票:0回答:4

有人知道这个错误是什么吗?

已弃用:preg_replace():/e 修饰符已弃用,请在 C:\xampp\htdocs\sfprojects\jobeet\lib endor\symfony\lib 中使用 preg_replace_callback 代替 esponse\sfWebResponse.class.php 第 409 行

我正在使用 xampp 1.8.3symfony 1.4

php preg-replace symfony-1.4 deprecation-warning
4个回答
6
投票

在 myproject/lib/vendor/symfony/lib/response/sfWebResponse.class.php 第 409 行

  protected function normalizeHeaderName($name)
  {
    // return preg_replace('/\-(.)/e', "'-'.strtoupper('\\1')", strtr(ucfirst(strtolower($name)), '_', '-'));    

    return preg_replace_callback(
                  '/\-(.)/', 
                  function ($matches) {
                    return '-'.strtoupper($matches[1]);
                  }, 
                  strtr(ucfirst(strtolower($name)), '_', '-')
        );
  }

修复了 /lib/vendor/symfony/lib/util/sfToolkit.class.php 第 360 行中的 pregtr 方法

public static function pregtr($search, $replacePairs){
  // return preg_replace(array_keys($replacePairs), array_values($replacePairs), $search);
  foreach($replacePairs as $pattern => $replacement)
  {
    if (preg_match('/(.*)e$/', $pattern, $matches))
    {
      $pattern = $matches[1];
      $search = preg_replace_callback($pattern, function ($matches) use ($replacement) {
        preg_match("/('::'\.)?([a-z]*)\('\\\\([0-9]{1})'\)/", $replacement, $match);
        return ($match[1]==''?'':'::').call_user_func($match[2], $matches[$match[3]]);
      }, $search);
    }
    else
    {
      $search = preg_replace($pattern, $replacement, $search);
    }
  }
  return $search;
}

我结合了重复线程Symfony 1.4使用php 5.5中已弃用的函数的两个答案mikaxtech回答(请给他们投票)

它还会影响第 281 行的 /lib/form/addon/sfFormObject.class.php

  protected function camelize($text)
  {
    //return preg_replace(array('#/(.?)#e', '/(^|_|-)+(.)/e'), array("'::'.strtoupper('\\1')", "strtoupper('\\2')"), $text); //ORIGINAL
    return strtr(ucwords(strtr($text, array('/' => ':: ', '_' => ' ', '-' => ' '))), array(' ' => ''));
  }

3
投票

发现这个:

http://blog.jakoubek.cz/symfony-1-4-deprecated-e-modifier

经过测试,所有更改看起来都不错


0
投票

由于这个函数在 sf 1.4 中的多个文件中被调用,因此以下是我在项目中所做的所有更改(基于不同的来源,包括 sf 1.4 分支):

lib/vendor/symfony/lib/command/sfCommandManager.class.php
    @@ -108,7 +108,9 @@ class sfCommandManager
         else if (!is_array($arguments))
         {
           // hack to split arguments with spaces : --test="with some spaces"
    -      $arguments = preg_replace('/(\'|")(.+?)\\1/e', "str_replace(' ', '=PLACEHOLDER=', '\\2')", $arguments);
    +      $arguments = preg_replace_callback('/(\'|")(.+?)\\1/', function ($match) {
    +        return str_replace(' ', '=PLACEHOLDER=', $match[2]);
    +      }, $arguments);
           $arguments = preg_split('/\s+/', $arguments);
           $arguments = str_replace('=PLACEHOLDER=', ' ', $arguments);
         }

lib/vendor/symfony/lib/form/addon/sfFormObject.class.php
@@ -278,6 +278,6 @@ abstract class sfFormObject extends BaseForm

   protected function camelize($text)
   {
-    return preg_replace(array('#/(.?)#e', '/(^|_|-)+(.)/e'), array("'::'.strtoupper('\\1')", "strtoupper('\\2')"), $text);
+    return strtr(ucwords(strtr($text, array('/' => ':: ', '_' => ' ', '-' => ' '))), array(' ' => ''));
   }

lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/form/sfFormFilterDoctrine.class.php
@@ -323,7 +323,7 @@ abstract class sfFormFilterDoctrine extends sfFormFilter

   protected function camelize($text)
   {
-    return sfToolkit::pregtr($text, array('#/(.?)#e' => "'::'.strtoupper('\\1')", '/(^|_|-)+(.)/e' => "strtoupper('\\2')"));
+    return strtr(ucwords(strtr($text, array('/' => ':: ', '_' => ' ', '-' => ' '))), array(' ' => ''));
   }

lib/vendor/symfony/lib/plugins/sfPropelPlugin/lib/form/sfFormFilterPropel.class.php
@@ -263,6 +263,6 @@ abstract class sfFormFilterPropel extends sfFormFilter

   protected function camelize($text)
   {
-    return sfToolkit::pregtr($text, array('#/(.?)#e' => "'::'.strtoupper('\\1')", '/(^|_|-)+(.)/e' => "strtoupper('\\2')"));
+    return strtr(ucwords(strtr($text, array('/' => ':: ', '_' => ' ', '-' => ' '))), array(' ' => ''));
   }


lib/vendor/symfony/lib/response/sfWebResponse.class.php
@@ -406,7 +406,7 @@ class sfWebResponse extends sfResponse

   protected function normalizeHeaderName($name)
   {
-    return preg_replace('/\-(.)/e', "'-'.strtoupper('\\1')", strtr(ucfirst(strtolower($name)), '_', '-'));
+    return strtr(ucwords(strtr(strtolower($name), array('_' => ' ', '-' => ' '))), array(' ' => '-'));
   }


lib/vendor/symfony/lib/util/sfInflector.class.php
@@ -27,11 +27,7 @@ class sfInflector

   public static function camelize($lower_case_and_underscored_word)
   {
-    $tmp = $lower_case_and_underscored_word;
-    $tmp = sfToolkit::pregtr($tmp, array('#/(.?)#e'    => "'::'.strtoupper('\\1')",
-                                         '/(^|_|-)+(.)/e' => "strtoupper('\\2')"));
-
-    return $tmp;
+    return strtr(ucwords(strtr($lower_case_and_underscored_word, array('/' => ':: ', '_' => ' ', '-' => ' '))), array(' ' => ''));
   }

此外,这里是 E_NOTICE lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Query/Abstract.php 的修复:

lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Query/Abstract.php
@@ -1149,7 +1149,16 @@ abstract class Doctrine_Query_Abstract
         $copy->free();

         if ($componentsBefore !== $componentsAfter) {
-            return array_diff($componentsAfter, $componentsBefore);
+            $diff = array();
+
+                       foreach($componentsAfter as $key => $val) {
+                               if(!isset($componentsBefore[$key])) {
+                                       $diff[$key] = $val;
+                               } elseif(is_array($componentsBefore[$key]) && !is_array($val)) {
+                                       $diff[$key] = $val;
+                               }
+                       }
+                       return $diff;
         } else {
             return $componentsAfter;
         }

-1
投票

您可以在每个应用程序 settings.yml 中取消设置 E_DEPRECATED 标志:

dev:
  .settings:
     error_reporting:  <?php echo ((E_ALL | E_STRICT) ^ E_DEPRECATED)."\n" ?>
© www.soinside.com 2019 - 2024. All rights reserved.