Symfony2 和 Twig - 检查资产是否存在

2024-02-13

我有一个使用 twig 模板的 symfony2 项目。

我正在显示一些图像,并且希望仅在特定资产存在时才显示图像。

我有这个:

{% if asset('bundles/sciforumversion2/images/logos/'~conf.img) %}
    <img style="width: 60px; float:right; margin-right: 15px;" src="{{ asset('bundles/sciforumversion2/images/logos/')}}{{ conf.img }}"/>
{% endif %}

但 if 条件始终为真。

有什么想法吗?谢谢。


如果您想检查资产是否存在,您可以创建一个树枝延伸 http://symfony.com/doc/2.2/cookbook/templating/twig_extension.html来实现该功能。

PHP In your Twig\Extension directory, create AssetExistsExtension.php with the following content:

<?php

namespace Fuz\TestBundle\Twig\Extension;

use Symfony\Component\HttpKernel\KernelInterface;

class AssetExistsExtension extends \Twig_Extension
{

    private $kernel;

    public function __construct(KernelInterface $kernel)
    {
        $this->kernel = $kernel;
    }

    public function getFunctions()
    {
        return array(
                'asset_exists' => new \Twig_Function_Method($this, 'asset_exists'),
        );
    }

    public function asset_exists($path)
    {
        $webRoot = realpath($this->kernel->getRootDir() . '/../web/');
        $toCheck = realpath($webRoot . $path);

        // check if the file exists
        if (!is_file($toCheck))
        {
            return false;
        }

        // check if file is well contained in web/ directory (prevents ../ in paths)
        if (strncmp($webRoot, $toCheck, strlen($webRoot)) !== 0)
        { 
            return false;
        }

        return true;
    }

    public function getName()
    {
        return 'asset_exists';
    }

}

YML And here is the configuration, to put in your services.yml file.

parameters:
    (...)
    fuz_tools.twig.asset_exists_extension.class: Fuz\TestBundle\Twig\Extension\Asset@ExistsExtension

services:
    (...)
    fuz_tools.twig.asset_exists_extension:
        class: '%fuz_tools.twig.asset_exists_extension.class%'
        arguments: ['@kernel']
        tags:
          - { name: twig.extension }

Twig To use this extension, on a twig file, use:

{% if asset_exists('bundles/fuztest/images/test.png') %}

Note:不要忘记替换命名空间以与您的项目相匹配。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symfony2 和 Twig - 检查资产是否存在 的相关文章

  • 排除“解析错误,意外的‘>’”错误[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我收到这个
  • mysql REGEXP 不匹配

    我有一个正则表达式 旨在捕获字符串中的电话号码 1 s d 3 s d 3 s d 4 我尝试使用以下查询在 MySql 数据库中查询此正则表达式 SELECT FROM everything instances meta AS m WHE
  • 在 PHP 中获取日期和数字工作日

    我正在用 PHP 开发一个应用程序 我需要使用日期和工作日的数字表示 我尝试过以下方法 today date Y m d number date N strtotime today echo Today today weekday numb
  • 静态类属性上的 isset

    class A public static foo 42 class A attribute foo var dump isset class attribute gives bool false 我如何检查这个类中是否存在这个静态属性 U
  • PHP 矩阵的逆矩阵

    I saw 这个问题 https stackoverflow com questions 211160 python inverse of a matrix 并弹出这个想法 PHP 有没有一种有效的方法来做到这一点 EDIT 最好有演示 你
  • curopt_binarytranfer 到底是什么意思?

    我不明白有什么区别 CURLOPT RETURNTRANSFER AND CURLOPT BINARYTRANSFER 我写了一个脚本来检查它
  • 使用 php5-geoip 和 Maxmind 数据库获取 IPv6 支持

    我按照这些相同的步骤进行了 geoip 设置 http php net manual en geoip setup php http php net manual en geoip setup php wget http geolite m
  • 将多个参数绑定到mysqli查询中

    现在我需要使用以下结构来处理将多个参数绑定到 mysqli 查询中 if words total 1 statement gt bind param s words 0 else if words total 2 statement gt
  • 服务器重新启动时显示等待页面

    我有一个服务器并为其创建一个 Web 界面 如果用户按下页面上的重新启动按钮 则用户将被重定向到reboot php他应该看到一个旋转 gif 直到服务器再次可访问并且服务器通过 shell 执行重新启动 如果服务器可以访问 那么我需要重定
  • MySQL 中复制一条记录

    我有一个表 我想复制表中的特定行 我知道这不是最好的方法 但我们正在寻找快速解决方案 这比我最初想象的要难 我需要做的就是将整个记录复制到 MySql 中自动增量表中的新记录 而不需要指定每个字段 这是因为该表将来可能会发生变化 并且可能会
  • 在 Windows 10 中安装 laravel 安装程序时出现错误

    我正在使用 Windows 10 并且composer已安装 当我尝试安装时laravel使用此命令全局安装程序 composer global require laravel installer Composer Downloader T
  • 在 PHP 中查找数字的倍数

    我想在 PHP 中找到一个数字的所有倍数 我正在使用这样的东西 if count 20 计算出如果 count不等于20 但我还需要这个脚本来检查是否 count不等于 20 40 60 80 100 120 140 160 等 有任何想法
  • 获取发送 cURL 请求的用户的 IP 地址

    我想获取使用 php 中的 cURL POST 方法向我的服务器发送请求的用户的 IP 地址 我正在开发一个 Flight API 我将使用 cURL POST 方法获取请求 我必须获取客户端的 IP 地址并验证他的 IP 地址是否可用 如
  • Laravel 4:Facades 是如何解决的?

    我有点想看看 Laravel 4 发生了什么facades在引擎盖下 我们以这个 Facade 为例 File get someArgs 如果我没有记错的话 逐步 过于简化 的调用将是 static method invocation wh
  • Laravel项目部署到Cpanel时出现404错误如何解决?

    我正在尝试将我的 laravel Laravel Framework 7 28 3 部署到 Cpanel 但出现 404 错误 我将项目上传到 public html 修改了 index php 文件以指向正确的文件 如下所示 我认为ind
  • 在 Laravel 中使用 PUT/DELETE 有什么价值?

    用于将路由定义为资源Route resource 文档表明 Verb Path Action Route Name GET resource index resource index GET resource create create r
  • 如何对 Slim 框架应用程序进行单元测试

    我一直在尝试对修改其他人代码的示例进行单元测试 每次我到达测试运行时都没有错误的程度 当我期望它们通过时 我只是遇到相同的失败 网上没有大量文档 我真的不知道还能去哪里 任何人都可以看到我的代码哪里出错了 bootstrap php php
  • 如何使用 Carbon 获取上个月的第一天和最后一天 - Laravel

    I need First and Last Day of 前一个月使用Carbon Library 我尝试过如下 firstDayofPreviousMonth Carbon now gt startOfMonth gt subMonth
  • PHP IMAP 解码消息

    我有通过 Base64 编码和 8 位编码发送的电子邮件 我想知道如何使用 imap fetchstruct 检查消息的编码 已经这样做了大约两个小时 所以丢失了 然后正确解码 Gmail 和 Mailbox iOS 上的应用程序 将其作为
  • 现实世界抽象类使用简单示例

    有没有使用抽象类的现实世界简单示例 我试图进入 PHP 的 OOP 但我仍然无法理解 为什么应该使用抽象类以及何时使用 是的 我知道不可能创建抽象类实例 只能创建继承它的类的实例 也许您有一个图像类 并且有 2 个驱动程序 GD 和 Ima

随机推荐