1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- <?php
-
- namespace Illuminate\View\Engines;
-
- use Exception;
- use Throwable;
- use Illuminate\Contracts\View\Engine;
- use Symfony\Component\Debug\Exception\FatalThrowableError;
-
- class PhpEngine implements Engine
- {
- /**
- * 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 at the given path.
- *
- * @param string $__path
- * @param array $__data
- * @return string
- */
- protected function evaluatePath($__path, $__data)
- {
- $obLevel = ob_get_level();
-
- ob_start();
-
- extract($__data, EXTR_SKIP);
-
- // 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;
- } catch (Exception $e) {
- $this->handleViewException($e, $obLevel);
- } catch (Throwable $e) {
- $this->handleViewException(new FatalThrowableError($e), $obLevel);
- }
-
- return ltrim(ob_get_clean());
- }
-
- /**
- * Handle a view exception.
- *
- * @param \Exception $e
- * @param int $obLevel
- * @return void
- *
- * @throws \Exception
- */
- protected function handleViewException(Exception $e, $obLevel)
- {
- while (ob_get_level() > $obLevel) {
- ob_end_clean();
- }
-
- throw $e;
- }
- }
|