public static function extend($view, $path) { $chain = self::resolveChain($view, $path); $view = array_shift($chain); foreach ($chain as $item) { $injects = array(); preg_match_all('/@inject.*?@(rewrite|append|prepend)/ms', $item, $injects); $map = array(); if (isset($injects[0])) { foreach ($injects[0] as $k => $s) { $m = array(); preg_match('/@inject.+?\\)/', $s, $m); $name = trim(str_replace(array('@inject', '(', ')', '"', '\''), '', $m[0])); $map[] = array($name, trim(self::clear($s)), $injects[1][$k]); } } foreach ($map as $key => $value) { $view = preg_replace_callback('/@block\\s*?\\(\\s*?(\'|")' . $value[0] . '(\'|")\\s*?\\).*?@endblock/ms', function ($e) use($value) { switch ($value[2]) { case 'prepend': return '@block(\'' . $value[0] . '\')' . $value[1] . Inherit::clear($e[0]) . '@endblock'; break; case 'append': return '@block(\'' . $value[0] . '\')' . Inherit::clear($e[0]) . $value[1] . '@endblock'; break; case 'rewrite': return '@block(\'' . $value[0] . '\')' . $value[1] . '@endblock'; break; } }, $view); } } return self::clear($view); }