Функция Lumen url() работает странно

Недавно я сделал новую установку фреймворка Lumen и начал создавать сайт на его основе. Да, я знаю, что Lumen предназначен только для API, но, пожалуйста, помогите мне с этим.

Я поместил все свои представления в /resources/views, а мои шаблоны — в /resources/views/templates.

Теперь, когда мне нужно было где-то разместить [css/js/images], я подумал, что было бы неплохо поместить все это в public/assets/[css/js/images]. .

Теперь в моем макете, когда я пытаюсь включить css, я использую что-то вроде этого:

<link href="{{ url('assets/css/something.css') }}">

и он работает, выдавая что-то вроде этого -

<link href="localhost/assets/css/something.css">

то же самое работает и для js, но становится странно, когда я пытаюсь включить изображения. Для включения изображения я пишу что-то вроде -

<img src ="{{ url('assets/images/someimage.jpg') }}"

и когда я просматриваю исходный код страницы, вывод такой, как я ожидаю -

<img src="localhost/assets/images/someimage.jpg">

но моя консоль выдает ошибку 404 not found, указывающую, что someimage.jpg не найден. И когда я перепроверяю, проверяя родителя изображения, URL-адрес совершенно отличается от этого:

<img src="localhost/images/someimage.jpg">

Видите, автоматически исключаются «активы» из URL-адреса изображения, что приводит к ошибке 404, но я вижу правильный URL-адрес при просмотре исходного кода страницы.

Вещи, которые я пытался решить -

  1. Очистил кеш и перезагрузил страницу.

  2. Пытался использовать assets() вместо url(), но его прототип был удален из lumen.

  3. Вытащите папку [css/js/images] из активов и вставьте их в родительский, т.е. общедоступный. Это сработало, но возникает вопрос: почему предыдущая установка работала и для css, и для js, но вызывала проблемы только с изображениями?

Другие мои вопросы -

<сильный>1. Как URL-адрес в исходном коде страницы может отличаться от отображаемого? Просто упомянем, что в моем случае URL-адрес в исходном коде страницы работал и отображал изображение, но поскольку URL-адрес отображался без «активов» из пути, это привело к ошибке 404.

<сильный>2. Есть ли другой хороший способ включить эти активы в представления. Если да, укажите также, куда их поместить?

Прикрепление некоторых изображений/кода для справки.

Вывод обработанной страницы с ошибкой 404 для изображений, но без ошибок для css.

Вывод исходных окон страницы просмотра, показывающих ресурс, включенный в путь к изображению


person Himanshu Singh    schedule 06.10.2016    source источник


Ответы (2)


Не знаю, правильно ли это, но я считаю, что вам действительно нужно поместить поток изображений внутри этого URL-адреса. Теперь сервер пытается получить какой-то объект с байтовой кодировкой, которого там нет.

Я понятия не имею, относится ли это к вам так же, но у меня было много случаев, когда мне приходилось вставлять потоки изображений вместо URL-адресов, которые я решил таким образом, используя эта библиотека:

Routes.php

/**
* Image handling routes.
* These make sure images actually are images instead of bytecode
*/
Route::get('organization/logo/{logo}', function($logo) {
    $file = Image::make(Storage::disk('logo-image')->get($logo));
    return $file->response();
});

Просмотреть

<img src="{{ asset('organization/logo/' . $organization->logo_path) }}" alt="">

Я могу быть совершенно не в себе, но я понимаю, что происходит с вашим приложением, и это решило проблемы, когда я его реализовал.

person Loek    schedule 06.10.2016
comment
Привет !! Спасибо за ответ, обязательно попробую ответить. Но пока не могли бы вы связать меня с любым ресурсом, где я могу найти больше информации о решении, которое вы дали? - person Himanshu Singh; 08.10.2016
comment
Я нашел это довольно полезным: m.reddit.com/r/laravel/comments /3f9257/ и в остальном документы Intervention Image довольно ясны - person Loek; 08.10.2016

Проверьте конфигурацию вашего веб-сервера. Похоже, у вас есть какая-то настройка перенаправления, которая перенаправляет assets/images/* только на images/*.

В качестве простого теста откройте вкладку «Сеть» и перейдите в браузере на http://samplelumena.local/assets/images/footer1.jpg. Я предполагаю, что трассировка сети покажет 30x (301, 302 и т. д.) до http://samplelumena.local/images/footer1.jpg, а затем 404 для этого URL-адреса.

person patricus    schedule 19.10.2016