Subversion-Projekte lars-tiefland.laravel_shop

Revision

Blame | Letzte Änderung | Log anzeigen | RSS feed

<?php

/**
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 * This software consists of voluntary contributions made by many individuals
 * and is licensed under the MIT license.
 *
 * Copyright (c) 2014-2022 Yuuki Takezawa
 *
 */

declare(strict_types=1);

namespace Ytake\LaravelSmarty\Engines;

use Illuminate\Contracts\View\Engine as EngineInterface;
use Throwable;
use Ytake\LaravelSmarty\Smarty;

use function extract;

use const EXTR_SKIP;

/**
 * Class SmartyEngine
 *
 * @author  yuuki.takezawa <yuuki.takezawa@comnect.jp.net>
 * @license http://opensource.org/licenses/MIT MIT
 */
class SmartyEngine implements EngineInterface
{
    /**
     * @param Smarty $smarty
     */
    public function __construct(
        protected Smarty $smarty
    ) {
    }

    /**
     * {@inheritdoc}
     * @throws Throwable
     */
    public function get($path, array $data = []): string
    {
        return $this->evaluatePath($path, $data);
    }

    /**
     * Get the evaluated contents of the view at the given path.
     *
     * @param string $path
     * @param array $data
     *
     * @return string
     * @throws Throwable
     */
    protected function evaluatePath(string $path, array $data = []): string
    {
        extract($data, EXTR_SKIP);
        if (!$this->smarty->isCached($path)) {
            foreach ($data as $var => $val) {
                $this->smarty->assign($var, $val);
            }
        }
        // render
        $cacheId = $data['smarty.cache_id'] ?? null;
        $compileId = $data['smarty.compile_id'] ?? null;
        return $this->smarty->fetch($path, $cacheId, $compileId);
    }
}