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

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
S c
Сообщения: 878
Зарегистрирован: 2012.04.11, 14:46

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

Сообщение 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 - якоря не работают почемуто

Аватара пользователя
S c
Сообщения: 878
Зарегистрирован: 2012.04.11, 14:46

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

Сообщение S c »

видел следующее решение
viewtopic.php?f=28&t=16414&start=200#p104295

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

Аватара пользователя
yiijeka
Сообщения: 3091
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka »

createAbsoluteUrl('uploads/news/test.jpg')

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

mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение mickgeek »

У меня так:

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

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

Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

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

Сообщение slavcodev »

Гори в аду, автор advanced шаблона!
Жду Yii 3!

Аватара пользователя
yiijeka
Сообщения: 3091
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka »

оО а мне нравится :)

Аватара пользователя
samdark
Администратор
Сообщения: 9364
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

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

Сообщение samdark »

Я автор... а чего сразу в аду? :)

Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

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

Сообщение slavcodev »

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

Аватара пользователя
yiijeka
Сообщения: 3091
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka »

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

Аватара пользователя
S c
Сообщения: 878
Зарегистрирован: 2012.04.11, 14:46

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

Сообщение S c »

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

Аватара пользователя
yiijeka
Сообщения: 3091
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka »

Ну да не совсем то. Лучше писать urlFmanager->baseUrl . '/upload/new/test.jpg' .

Аватара пользователя
S c
Сообщения: 878
Зарегистрирован: 2012.04.11, 14:46

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

Сообщение S c »

то что нужно, и так просто! Спасибо.

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

Аватара пользователя
yiijeka
Сообщения: 3091
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka »

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

Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

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

Сообщение 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 тоже лежит в подкаталоге относительно каталога на который корень домена смотрит.
Сначала невидимое, затем видимое. И так у всех программистов :)

Аватара пользователя
yiijeka
Сообщения: 3091
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka »

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

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

Аватара пользователя
S c
Сообщения: 878
Зарегистрирован: 2012.04.11, 14:46

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

Сообщение 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 разных сайта. С разными доменами.

Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

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

Сообщение Stepan Selyuk »

yiijeka писал(а):

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

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

Аватара пользователя
yiijeka
Сообщения: 3091
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka »

Я про это подумал сразу же и полез - посмотреть urlManager же доступен в ConsoleApplication

Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

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

Сообщение Stepan Selyuk »

И в консоли работает эта функция и выдает нормальный результат?
Сначала невидимое, затем видимое. И так у всех программистов :)

Аватара пользователя
yiijeka
Сообщения: 3091
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka »

urlManager->hostInfo наверное да. Когда-нибудь попробую :)

Ответить