smarty中的变量修饰符名称?

时间:2012-12-11 02:40:14

标签: php variables smarty smarty3

我有两个变量,一个是$video_id,其中包含youtube或vimeo视频ID。 另一个是$video_type,其中包含“youtube”或“vimeo”。

我在php中有两个函数,
youtube_embed($id, $width, $height)
vimeo_embed($id, $width, $height)

我想要做的是调用此函数在$video_id

中传递它

我能做到:

{if $video_type == 'youtube'}
    {$video_id|youtube_embed:123:123}
{elseif $video_type == 'vimeo'}
    {$video_id|vimeo_embed:123:123}
{/if}

但我想知道你是否可以使用变量修饰符名称,例如

{$video_id|`$video_type`_embed:123:123}

1 个答案:

答案 0 :(得分:1)

这是一个坏主意,即使你可以。

如果您这样做,您的代码将来会更清晰地阅读,维护和扩展:

{$video_id|video_embed:$video_type:123:123}

然后在PHP中检查$ video_type并将其传递给相应的修饰符,而不是尝试在模板级别处理它。

function video_embed($video_id, $video_type, $x, $y){
    switch($video_type){
        case('youtube'):
            youtube_embed($video_id, $x, $y);
            break;

        case('vimeo'):
            vimeo_embed($video_id, $x, $y);
            break;

        default:
            throw new UnsupportVideoTypeException($video_type);
    }
}

当你不可避免地需要支持新的视频类型时,你只需要在PHP的video_embed函数中添加一些代码,而不是编辑每个显示视频的模板。

为了记录,没有看起来不可能。查看Smarty的源代码,当它期望修饰符时,它不会尝试评估变量。