Страница 1 из 2

Создание ссылок с backend на frontend

Добавлено: 2014.09.03, 21:59
S c
http://www.yiiframework.com/doc-2.0/gui ... o-frontend

Пример в доке:

Код: Выделить всё

return [
    'components' => [
        'urlManager' => [
            // here is your normal backend url manager config
        ],
        'urlManagerFrontend' => [
            // here is your frontend URL manager config
        ],

    ],
];
Как это использовать?

Сохраняю фотографии к новости в папке frontend\web\uploads\news\test.jpg. Хочу с backend-а (http://bk.site.com) получить ссылку на фотку, используя

Код: Выделить всё

Yii::$app->urlManagerFrontend->createUrl(...);
Нужно получить ссылку: "http://site.com/uploads/news/test.jpg". Не пойму какие url правила описать

p.s. кстати в ссылке на guide - якоря не работают почемуто

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.03, 22:02
S c
видел следующее решение
viewtopic.php?f=28&t=16414&start=200#p104295

но хотелось бы именно разобраться в варианте, предложенном выше

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.03, 22:04
yiijeka
createAbsoluteUrl('uploads/news/test.jpg')

Если не сработает, то $baseUrl установить для urlManagerFrontend нужный

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.03, 22:10
mickgeek
У меня так:

Код: Выделить всё

'urlManagerFrontend' => [
    'class' => 'yii\web\UrlManager',
    'baseUrl' => '',
    'hostInfo' => 'http://domain.ru',
    'enablePrettyUrl' => true,
    'enableStrictParsing' => true,
    'showScriptName' => false,
],

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.03, 22:42
slavcodev
Гори в аду, автор advanced шаблона!

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.03, 22:49
yiijeka
оО а мне нравится :)

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.04, 02:29
samdark
Я автор... а чего сразу в аду? :)

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.04, 02:37
slavcodev
Sam Dark писал(а):Я автор... а чего сразу в аду? :)
Не, не. Я не про конкретно "Yii 2 Advanced Application Template".
А про саму структуру, вроде кто-то из Clevertech первый предложил.
Не хочу холиварить, особенно здесь. Считайте это мое, никого не интересующее ИМХО!

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.04, 07:57
yiijeka
Цян же при yii1 ещё вики написал. На основе её потом Антонио боллерплайте создал. И понеслась...

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.04, 21:07
S c
Спасибо огромное, особенно yiijeka и mickgeek. Работает. Но как по мне - это не совсем корректно, в createUrl передавать что то типа "'uploads/news/test.jpg'", ведь createUrl ждет route (модуль/контроллер/экшен), а не просто ссылку. Верно ведь?

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.04, 21:21
yiijeka
Ну да не совсем то. Лучше писать urlFmanager->baseUrl . '/upload/new/test.jpg' .

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.04, 21:48
S c
то что нужно, и так просто! Спасибо.

p.s. наверное лучше ->hostInfo использовать?

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.04, 21:58
yiijeka
Хм, я его никогда не использовал. Всегда baseUrl хватало, не знаю, чем baseUrl от hostInfo отличается? :)

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.05, 02:26
Stepan Selyuk
/**
* Returns the base URL that is used by [[createUrl()]] to prepend URLs it creates.
* It defaults to [[Request::scriptUrl]] if [[showScriptName]] is true or [[enablePrettyUrl]] is false;
* otherwise, it defaults to [[Request::baseUrl]].
* @return string the base URL that is used by [[createUrl()]] to prepend URLs it creates.
* @throws InvalidConfigException if running in console application and [[baseUrl]] is not configured.
*/
public function getBaseUrl();
/**
* Returns the host info that is used by [[createAbsoluteUrl()]] to prepend URLs it creates.
* @return string the host info (e.g. "http://www.example.com") that is used by [[createAbsoluteUrl()]] to prepend URLs it creates.
* @throws InvalidConfigException if running in console application and [[hostInfo]] is not configured.
*/
public function getHostInfo();
Второй возвращает абсолютные адреса, включая схему и домен. getHostInfo() там где нужно экспортировать адрес, на другой сайт, например. А на страницах вашего приложения можно просто указывать /upload/images/image.jpg или ->getBaseUrl() . '/upload/images/image.jpg', в случае если у вас приложение лежит в подкаталоге и соответственно upload тоже лежит в подкаталоге относительно каталога на который корень домена смотрит.

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.05, 08:00
yiijeka

Код: Выделить всё

echo Yii::$app->urlManager->baseUrl;
echo Yii::$app->urlManager->hostInfo; 
Расставило всё на свои места.
А я как ... использовал param, в который писал домен. И пихал в рассылку писем... За столько лет почему-то даже и не пришло на ум посмотреть есть ли в природе Yii hostInfo. Спасибо и вам :)

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.05, 08:27
S c
Stepan Selyuk писал(а):
/**
* Returns the base URL that is used by [[createUrl()]] to prepend URLs it creates.
* It defaults to [[Request::scriptUrl]] if [[showScriptName]] is true or [[enablePrettyUrl]] is false;
* otherwise, it defaults to [[Request::baseUrl]].
* @return string the base URL that is used by [[createUrl()]] to prepend URLs it creates.
* @throws InvalidConfigException if running in console application and [[baseUrl]] is not configured.
*/
public function getBaseUrl();
/**
* Returns the host info that is used by [[createAbsoluteUrl()]] to prepend URLs it creates.
* @return string the host info (e.g. "http://www.example.com") that is used by [[createAbsoluteUrl()]] to prepend URLs it creates.
* @throws InvalidConfigException if running in console application and [[hostInfo]] is not configured.
*/
public function getHostInfo();
Второй возвращает абсолютные адреса, включая схему и домен. getHostInfo() там где нужно экспортировать адрес, на другой сайт, например. А на страницах вашего приложения можно просто указывать /upload/images/image.jpg или ->getBaseUrl() . '/upload/images/image.jpg', в случае если у вас приложение лежит в подкаталоге и соответственно upload тоже лежит в подкаталоге относительно каталога на который корень домена смотрит.

В моём случае front и backend - можно сказать 2 разных сайта. С разными доменами.

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.05, 14:58
Stepan Selyuk
yiijeka писал(а):

Код: Выделить всё

echo Yii::$app->urlManager->baseUrl;
echo Yii::$app->urlManager->hostInfo;
Расставило всё на свои места.
А я как ... использовал param, в который писал домен. И пихал в рассылку писем... За столько лет почему-то даже и не пришло на ум посмотреть есть ли в природе Yii hostInfo. Спасибо и вам :)
В консольном режиме все равно не поможет и там нужно юзать как раз заданный в конфиге (каком-либо) параметр.

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.05, 15:00
yiijeka
Я про это подумал сразу же и полез - посмотреть urlManager же доступен в ConsoleApplication

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.05, 15:16
Stepan Selyuk
И в консоли работает эта функция и выдает нормальный результат?

Re: Создание ссылок с backend на frontend

Добавлено: 2014.09.05, 15:17
yiijeka
urlManager->hostInfo наверное да. Когда-нибудь попробую :)