gpt4 book ai didi

symfony - 获取指定bundle中图片的路径

转载 作者:行者123 更新时间:2023-12-02 10:07:31 25 4
gpt4 key购买 nike

在我的包中,我有一个 Resources/public/images/image.jpg 文件。

此图像可通过http://localhost/bundles/mybundle/images/image.jpg

访问

如何从 Controller 获取此 /bundles/mybundle 前缀?
我希望能够生成公共(public)文件的路径,而无需硬编码 /bundles/mybundle 前缀。

最佳答案

我会创建一个可以执行此操作的服务

创建服务

该类的主要职责是获取任何资源的任何包的默认Web路径。
assets:install 中定义命令,对于给定的 FooBarBundle

,每个包的相对路径预计为 /bundles/foobar/

Acme\FooBundle\WebPathResolver

use Symfony\Component\HttpKernel\Bundle\BundleInterface;

class WebPathResolver
{
/**
* Gets the prefix of the asset with the given bundle
*
* @param BundleInterface $bundle Bundle to fetch in
*
* @throws \InvalidArgumentException
* @return string Prefix
*/
public function getPrefix(BundleInterface $bundle)
{
if (!is_dir($bundle->getPath().'/Resources/public')) {
throw new \InvalidArgumentException(sprintf(
'Bundle %s does not have Resources/public folder',
$bundle->getName()
));
}

return sprintf(
'/bundles/%s',
preg_replace('/bundle$/', '', strtolower($bundle->getName()))
);
}

/**
* Get path
*
* @param BundleInterface $bundle Bundle to fetch in
* @param string $type Which folder to fetch in (image, css..)
* @param string $resource Resource (image1.png)
*
* @return string Resolved path
*/
public function getPath(BundleInterface $bundle, $type, $resource)
{
$prefix = $this->getPrefix($bundle);

return sprintf('%s/%s/%s', $prefix, $type, $resource);
}
}

在你的service.yml中声明它

没有什么特别的,只是普通的服务

@AcmeFooBundle/Resources/config/services.yml

services:
acme_foo.webpath_resolver:
class: Acme\FooBundle\WebPathResolver

用法

然后您可以像这样在 Controller 中使用它

Acme\FooBundle\Controller\BarController::bazAction

$bundle = $this->get('http_kernel')->getBundle('AcmeFooBundle');
$path = $this->get('acme.webpath_resolver')->getPath($bundle, 'image', 'foo.png');

echo $path; // Outputs /bundles/acmefoo/image/foo.png

关于symfony - 获取指定bundle中图片的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21017639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com