Как получить полный URL для актива в контроллере? - PullRequest
46 голосов
/ 11 января 2012

Мне нужно сгенерировать некоторый контент JSON в контроллере, и мне нужно получить полный URL для загруженного изображения, расположенного здесь: /web/uploads/myimage.jpg.

Как я могу получить его полный URL?

http://www.mywebsite.com/uploads/myimage.jpg

Ответы [ 14 ]

1 голос
/ 13 марта 2015

Решение @Al Jey прекрасно работает с Assetic (протестировано на Symfony 2.6)

{% image '@AcmeBundle/Resources/public/images/myimage.jpg' %} 
    <img src="{{ app.request.uriForPath(asset_url) }}"> 
{% endimage %}
0 голосов
/ 01 февраля 2019

Для CDN вы также можете ввести Packages непосредственно в ваш сервис.

Сначала URL базы ресурсов в config.yml:

framework:
    assets:
        base_url:
            - 'http://cdn.mysite.com'

Тогда самое интересное:

namespace App\Service;

use Symfony\Component\Asset\Packages;

class SomeClass
{
    private $packages;

    public function __construct(Packages $packages)
    {
        $this->packages = $packages;
    }

    public function proxyToAssetUrl(string $path): string
    {
        return $this->packages->getUrl($path);
    }
}

Если у вас включена автопроводка, вам не нужно ничего настраивать в services.yml, иначе что-то вроде:

services:
    App\Service\SomeClass:
        class: App\Service\SomeClass
        arguments: ['@assets.packages']
0 голосов
/ 22 ноября 2017

Вы можете получить URL сайта, т.е. указать веб-папку, используя следующий код

$ protocol = stripos ($ _ SERVER ['SERVER_PROTOCOL'], 'https') === true? 'https://':' http://';

    $hostName = $request->server->get('HTTP_HOST');

    $baseDirectory = "";

    if(!empty($this->container->get('router')->getContext()->getBaseUrl())){

        $baseDirectory = str_replace('app_dev.php', '', $this->container->get('router')->getContext()->getBaseUrl());
    }

    $rootUrl = $protocol.$hostName.$baseDirectory;
0 голосов
/ 27 августа 2017

Рабочий раствор в Symfony 3.3 +

# app/config/config.yml
parameters:
    ...
    base_url: 'http://mywebsite.com'

Чтобы включить его в действие вашего контроллера:

$baseUrl = $this->getParameter('base_url');

Теперь вы можете добавить к нему свое изображение, например: $baseUrl . '/uploads/' . $image или есливам нравится, что вы можете определить базовый URL загруженных ресурсов в config.yml и получить к нему доступ в действии контроллера.

Лучше всего в этом решении будет возможность предварительно определить его для различных сред, например: config.yml,config_dev.yml и config_test.yml, поэтому, когда вы перемещаете свой проект между различными средами, вам не нужно менять его, поскольку он уже там ..

Приветствия!

...