Почему yii2 не видит ссылки?

Здравствуйте, поставила шаблон на yii2, но при проверке сайта через браузер, он просто не видит мои изображения и поэтому сайт не открывается. В консоле браузер выдаёт такие ошибки:
5bcf3c765c9eb700364918.png
Прописываю вот такие ссылки к изображениям:
<img src='<?=Url::toRoute( [ "/../images/logo.png" ] )?>'
  • Вопрос задан
  • 667 просмотров
Решения вопроса 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Не надо путь к статике возлагать на yii, зачем? Просто прописывайте путь к файлу, а сервер настройте, что бы он ввел к точке входа только те запросы, для которых нет статики, собственно стандартно так и должно быть:
https://github.com/yiisoft/yii2-app-advanced/blob/...
Соответственно картинка будет иметь вид
<img src="/images/logo.png" />
При этом сама картинка лежит в корне сайта в папке images. Корень сайта это обычно папка web, там где у Вас точка входа (index.php)
Метод toRoute который Вы юзаете строит url на основании маршрута, где Вы указываете модуль, контролер, экшен и параметры.
Ответ написан
Комментировать
slo_nik
@slo_nik Куратор тега Yii
Добрый вечер.
Размещайте файлы в web директории, создайте в ней директорию по названию темы и в созданной директории images.
Получится такой путь к изображениям
app\web\themes\name_theme\images
Выводить можно будет так:
<?= Html::img('@web/themes/name_theme/images/page4_img1.jpg') ?>

Возможно в Вашем варианте тоже получится использовать псевдоним @web

p.s.
Есть ещё пару вариантов с использованием AssetBundl для темы.
Например есть тема "Portfolio".
Файлы изображений располагаете по пути app\themes\portfolio\assets\img
В директории app\assets создаёте файл PortfolioAsset
class PortfolioAsset extends AssetBundle
{
	//public $basePath = '@app/themes/portfolio/assets';
	//public $baseUrl = '@app/themes/portfolio';
	public $sourcePath = '@app/themes/portfolio/assets';
	public $css = [
            'css/bootstrap.min.css',
            'css/stylish-portfolio.css',
            'font-awesome/css/font-awesome.min.css',
            'http://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic'
	];
	public $js = [
           'js/jquery.js',
           'js/bootstrap.min.js',
           'js/local.js'
	];
	public $depends = [
	];
}

Подключаете этот файл в layout темы и создаёте вспомогательную переменную
$image = PortfolioAsset::register($this);
Теперь получить изображение можно так
echo Html::img($image->baseUrl.'/img/portfolio-1.jpg');

Или, в layout темы создаёте такую переменную
$theme = $this->theme;
Расскоментируете в PortfolioAsset строку public $baseUrl = '@app/themes/portfolio'; и получаете изображение уже таким способом
echo Html::img($theme->getUrl('assets/img/portfolio-4.jpg'));

В итоге все файлы темы находятся в одном месте app\themes\name_theme\assets и не надо раскидывать их по всему проекту.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы