67

Symfony2 (2.2) を使用したアプリケーションがあります。メールを送信したいのですが、パスに問題があります。パスはすべて相対パスであり、明らかにメール内では機能していません。

私が使用しているパスをレンダリングするために:

<a href="{{ path('route_name', {'param' : value}) }}">A link</a>

アセットの場合:

<img src="{{ asset('bundle/myname/img/image.gif') }}" alt="Title"/>

前の例は問題なく動作しますが、パスは相対パスであるため、ドメインを追加する必要があります。私は次のようなことができます:

<a href="http://domain.com{{ path('route_name', {'param' => param1}) }}">A link</a>

しかし、ドメインが異なるため、これは私の問題に対する最善の解決策ではありません。

アップデート

関数を使用してパスの解決策を見つけましたがurl、アセットの解決策がまだ必要です。

4

9 に答える 9

128

Symfony 2.7 には、絶対 URL を生成するために使用できる 新しいabsolute_urlがあります。http://symfony.com/blog/new-in-symfony-2-7-the-new-asset-component#template-function-changes

これらの両方のケースまたはパス文字列で機能します。

<a href="{{ absolute_url(path('route_name', {'param' : value})) }}">A link</a>

アセットの場合:

<img src="{{ absolute_url(asset('bundle/myname/img/image.gif')) }}" alt="Title"/>

または任意の文字列パスの場合

<img src="{{ absolute_url('my/absolute/path') }}" alt="Title"/>

これらのツリーの場合、次のような絶対 URL になります。

http://www.example.com/my/absolute/path
于 2015-09-24T20:02:12.843 に答える
13

おそらく、assets_base_urls構成を使用する必要があります。

framework:
    templating:
        assets_base_urls:
            http:   [http://www.website.com]
            ssl:   [https://www.website.com]

http://symfony.com/doc/current/reference/configuration/framework.html#assets


Symfony 2.7から設定が異なることに注意してください:

framework:
    # ...
    assets:
        base_urls:
            - 'http://cdn.example.com/'
于 2013-06-11T18:24:52.887 に答える
4

http://test_site.comhttps://production_site.comを持つことができます。その場合、URL をハードコーディングするのは悪い考えです。私はこれを提案します:

{{app.request.scheme ~ '://' ~ app.request.host ~ asset('bundle/myname/img/image.gif')}}
于 2014-03-26T10:05:12.517 に答える
1

コマンドを使用して絶対 URL を生成するための追加情報 (たとえば、電子メールを送信するため)

コマンドで{{ absolute_url(path('index')) }}は、そのままでは機能しません。

antongorodezkiy の回答に示されている追加の構成を追加する必要があります。

ただし、アプリ全体にどのように影響するかわからないために構成を変更したくない場合は、コマンドでルーターを構成できます。

ドキュメントは次のとおりです。

https://symfony.com/doc/3.4/console/request_context.html

コードは次のとおりです。

use Symfony\Component\Routing\RouterInterface;
// ...

class DemoCommand extends Command
{
    private $router;

    public function __construct(RouterInterface $router)
    {
        parent::__construct();

        $this->router = $router;
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $context = $this->router->getContext();
        $context->setHost('example.com');
        $context->setScheme('https');
        $context->setBaseUrl('my/path');

        $url = $this->router->generate('route-name', ['param-name' => 'param-value']);
        // ...
    }
}

Twig テンプレートで URL を生成するには

<a href="{{ absolute_url(path(...)) }}"></a>

envファイルからHOSTとSCHEMEを取得できます

$context = $this->router->getContext();
$context->setHost($_ENV['NL_HOST']);
$context->setScheme($_ENV['NL_SCHEME']);

.env および .env.local ファイルで変数を定義するだけです

NL_HOST=mydomain.com
NL_SCHEME=https
于 2020-06-10T11:26:55.273 に答える