关于webman图片,css等路径问题

siwei

问题描述

请教:关于webman图片,css等路径问题
截图

结果:图片,css 都不能正确显示。
截图

244 2 0
2个回答

Madman

1、因为网站根目录实际是public,所以如果想直接访问静态资源可以放到public目录下。

2、如果是插件应用的话,支持放到plugin/{插件}/public目录下,比如这里的插件名为foo,那么请求地址就是http://127.0.0.1:8787/app/foo/avatar.png,实际上是获取plugin/foo/public/avatar.png文件。
参考 https://www.workerman.net/doc/webman/app/static.html

3、如果实在想根据自己的目录来存放静态资源,可以通过设置路由的方法实现。
新建一个控制器PublicController.php如下:

<?php

declare(strict_types=1);

namespace app\controller;

use support\Request;
use support\Response;

class PublicController
{
    /**
     * @param Request $request
     * @param string $path
     * @return Response
     */
    public function index(Request $request, string $path = ''): Response
    {
        // 静态文件目录
        $static_base_path = base_path() . '/app/view/assets';
        // 安全检查,避免url里 /../../../password 这样的非法访问
        if (str_contains($path, '..')) return not_found();
        // 文件
        $file = "$static_base_path/$path";
        if (!is_file($file)) return not_found();
        return response('')->withFile($file);
    }
}

然后在config/route.php里加一条路由

Route::any('/app/view/assets/[{path:.+}]', [\app\controller\PublicController::class, 'index']);

这个时候就可以访问指定目录下的静态资源了

  • Madman 2024-02-18

    模板里不需要获取啊,直接像你那样写地址就行,实在不行加个配置文件 把这个路径写到配置文件里,再读取配置文件里的参数

  • siwei 2024-02-18

    html 模版怎么调用 $static_base_path 比如如下模板
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>webman</title>
    </head>
    <body>
    hello {$name}
    </body>
    </html>

  • Madman 2024-02-18

    我还是没明白你模板里要这个变量是干嘛用,如果只是为了写资源路径简短一点,完全可以在app/function.php里加一个方法函数,比如

    function static_base_path(string $path = '')
    {
        $static_base_path = 'app/view/assets';
        if ($path) {
            $static_base_path .= $path;
        }
        return $static_base_path;
    }

    模板里使用的时候就是<?php echo static_base_path();?>/images/cai1.png,或者直播<?php echo static_base_path('/images/cai1.png');?>

  • siwei 2024-02-18

    只是想能够正确调用而已,如图https://www.workerman.net/upload/img/20240218/1865d1ce1301b9.png 调用结果不能正确显示。如果不用<?php echo static_base_path();?>/images/cai1.png ,如何写才能正确调用。

  • siwei 2024-02-18

    app/view/assets/images/cai1.png 不能正确显示

  • Madman 2024-02-18

    你直接打开 http://127.0.0.1:8787/app/view/assets/images/cai1.png 能打开图片吗? 如果不能打开,就在PublicController控制器里打印一些信息看看路由有没有定位成功。

six

手册说静态文件不能使用 /app/ 开头的路径,因为以/app/开头代表访问某插件,也就是默认访问不到 public/app/ 目录下的静态文件。
例如 /app/view/assets/images/cai1.png 实际访问的是 /plugin/view/public/app/view/assets/images/cai1.png
前缀不用/app/就好了
比如 /apps/view/assets/images/cai1.png 实际访问的是 /public/apps/view/assets/images/cai1.png

静态文件相关见手册 https://www.workerman.net/doc/webman/static.html

  • 暂无评论
🔝