aktualizacja symfony 1.4 do PHP 7.3
In %SF_LIB_DIR%/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Collection.php line 463 you will find:
$record->$relation['alias'] = $this->reference;
In PHP 5 this was interpreted as
$record->${relation['alias']} = $this->reference;
what the author intended. In PHP7 it will be interpreted as
${record->$relation}['alias'] = $this->reference;
what leads to the error regarding relations.
To remedy this problem, just make the implicit explicit:
$record->{$relation['alias']} = $this->reference;
and this problem is gone.
Additionally you have to change in following Doctrine files: Doctrine/Adapter/Oracle.php line 586 from
$query = preg_replace("/(\?)/e", '":oci_b_var_". $bind_index++' , $query);
to
$query = preg_replace_callback("/(\?)/", function () use (&$bind_index) { return ":oci_b_var_".$bind_index++; }, $query);
Doctrine/Connection/Mssql.php line 264 from
$tokens[$i] = trim(preg_replace('/##(\d+)##/e', "\$chunks[\\1]", $tokens[$i]));
to
$tokens[$i] = trim(preg_replace_callback('/##(\d+)##/',function ($m) use($chunks) { return $chunks[(int) $m[1]]; }, $tokens[$i] ));
and line 415 from
$query = preg_replace('/##(\d+)##/e', $replacement, $query);
to
$query = preg_replace_callback('/##(\d+)##/', function($m) use ($value) { return is_null($value) ? 'NULL' : $this->quote($params[(int) $m[1]]); }, $query);
and replace normalizeHeaderName
/lib/vendor/symfony/lib/response/sfWebResponse.class.php
protected function normalizeHeaderName($name) { $out = []; array_map(function ($record) use (&$out) { $out[] = ucfirst(strtolower($record)); }, explode('-', $name)); return implode('-', $out); }
for pregtr method in /lib/vendor/symfony/lib/util/sfToolkit.class.php on line 360
public static function pregtr($search, $replacePairs){
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;
}
/lib/form/addon/sfFormObject.class.php on line 281
protected function camelize($text)
{
return strtr(ucwords(strtr($text, array('/' => ':: ', '_' => ' ', '-' => ' '))), array(' ' => ''));
}