【问题标题】:Getting 404 on images in public folder using a custom function in Laravel使用 Laravel 中的自定义函数在公共文件夹中的图像上获取 404
【发布时间】:2019-10-29 20:23:39
【问题描述】:

我正在尝试使用一个简单的功能来自动填充画廊页面中的图像,但在图像上得到 404。其他一切都按预期工作。

我正在使用材质 css,所有这些绒毛都正常工作。我得到了正确数量的图像卡。

路径正确回显,并且在函数内生成的图像名称没有问题。我正在使用 Laravel 的 {{asset}} 功能,并且我的图像位于公共文件夹中,因此访问不应该(?)成为问题。

public static function addImg($dirname){
$images = scandir($dirname);
$ignore = Array(".", "..");
foreach($images as $curimg){
    if(!in_array($curimg, $ignore)) {
        echo "<div class='col s12 m6 l4'>
        <img src='{{asset({$dirname}{$curimg})}}' class='materialbox responsive-img card'>$curimg
    </div>";
    }
}       
}

电话是

{{$gallery::addImg('/css/img/')}}

控制台显示"GET http://127.0.0.1:8000/%7B%7Basset(~snip for privacy~/public/css/img/hero%20(2).jpg)%7D%7D 404 (Not Found)"

【问题讨论】:

  • 看起来在 url 中使用了绝对路径,这可能不起作用。您必须在 /css/img/... 之前删除该部分
  • @Rolf 很棒的收获!不幸的是,它没有纠正问题,现在我收到了GET http://127.0.0.1:8000/%7B%7Basset(hero%20(2).jpg)%7D%7D 404 (Not Found)

标签: laravel


【解决方案1】:

您在常规字符串中使用 Blade 语法。它不会被解析。您必须按照实际需要返回字符串。

在定义字符串时,您需要进行任何插值,就像在 PHP 中定义任何其他常规字符串一样。

$location = asset($dirname . $curimage);

echo "<img src='{$location}' ...>{$curimage}";

另外,您正在调用{{ $gallery::addImg(...) }},它不会返回任何可能被 Blade 回显的内容。 {{ }} 用于在 Blade 中回显,而不仅仅是执行 PHP 语句。

这听起来像是您可以将其制成自定义 Blade 指令的东西。

【讨论】:

  • 我在从控制器注入函数后使用它。 @inject('gallery', 'App\Http\Controllers\gallery') 这是不被接受的做法吗?很抱歉这个新手问题,试图围绕刀片和 Laravel 的细微差别。
  • 如果你愿意,但这不是问题......你必须用普通的 PHP 插值构建字符串,如果你把 {{ }} 放在你的字符串中,实际上是 {{ }},字符串不是 Blade
  • 是的,我只是在实施您的修复时澄清这一点,这是我所缺少的 100%,谢谢!为了进一步参考,以防将来有人阅读此答案,我还需要将 public_path 添加到我的 images 变量(解决另一个错误后弹出的错误)
  • 没问题...您的scandir 通话需要public_path
  • 我做到了,因为我只是通过$dirname 将“/css/img/”位传递给函数。收到“找不到文件”错误。
【解决方案2】:

您不能在字符串中使用刀片语法,因为刀片将仅解析 .blade.php 文件。

但是你可以只使用简单的 php 连接:

public static function addImg($dirname){
    $images = scandir($dirname);
    $ignore = Array(".", "..");
    foreach($images as $curimg){
        if (!in_array($curimg, $ignore)) {
            echo "<div class='col s12 m6 l4'>
            <img src='" . asset($dirname . $curimg) . "' class='materialbox responsive-img card'>$curimg
        </div>";
        }
    }       
}

【讨论】:

    猜你喜欢
    • 2017-02-03
    • 2021-09-08
    • 2021-12-02
    • 2022-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多