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

#php #laravel #laravel-5 #lumen #lumen-5.2

#php #laravel #laravel-5 #lumen #lumen-5.2

Вопрос:

Недавно я выполнил новую установку Lumen framework и начал создавать сайт на его основе. Да, я знаю, что 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 не найденных ошибки с указанием someimage.jpg не найден. И когда я перепроверяю, проверяя родительский элемент изображения, URL-адрес совершенно другой, что-то вроде этого —

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

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

Вещи, которые я пытался решить проблему —

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

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

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

Мои другие вопросы —

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

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

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

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

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

Ответ №1:

Понятия не имею, правильно ли это, но я считаю, что вам действительно нужно поместить поток изображений внутри этого 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="">
  

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

Комментарии:

1. Привет !! Спасибо за ответ, я бы обязательно попытался ответить. Но пока не могли бы вы, пожалуйста, связать меня с любым ресурсом, где я могу найти больше информации о решении, которое вы дали?

2. Я нашел это довольно полезным: m.reddit.com/r/laravel/comments/3f9257 / … и в остальном документы с изображением вмешательства довольно ясны

Ответ №2:

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

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