<?php
namespace Illuminate\View\Engines;
use Exception;
use Throwable;
use Symfony\Component\Debug\Exception\FatalThrowableError;
class PhpEngine implements EngineInterface
{// PhpEngine implements EngineInterface
/**
* Get the evaluated contents of the view.
*
* @param string $path
* @param array $data
* @return string
*/
public function get($path, array $data = [])
{
return $this->evaluatePath($path, $data);
}// get the evaluated contents of the view.
// evaluate Path
/**
* Get the evaluated contents of the view at the given path.
*
* @param string $__path
* @param array $__data
* @return string
*/
protected function evaluatePath($__path, $__data)
{// Get the evaluated contents of the view at the given path
$obLevel = ob_get_level();// get this ob level
ob_start();// start ob
extract($__data, EXTR_SKIP);// get this data
// We'll evaluate the contents of the view inside a try/catch block so we can
// flush out any stray output that might get out before an error occurs or
// an exception is thrown. This prevents any partial views from leaking.
try {
include $__path;// try get this file
} catch (Exception $e) {
$this->handleViewException($e, $obLevel);// handle
} catch (Throwable $e) {
$this->handleViewException(new FatalThrowableError($e), $obLevel);// handle
}// we'll evaluate the contents of the view inside a try/catch block so we can
// flush out any stray output that might get out before an error occurs or
// an exception is thrown. this prevents any partial view from leaking.
return ltrim(ob_get_clean());
}
/**
* Handle a view exception.
*
* @param \Exception $e
* @param int $obLevel
* @return void
*
* @throws $e
*/
protected function handleViewException(Exception $e, $obLevel)
{
while (ob_get_level() > $obLevel) {
ob_end_clean();
}// clean ever thing
throw $e;// throw $e
}//Handle a view exception.
}
共同学习,写下你的评论
评论加载中...
作者其他优质文章