请教:关于webman图片,css等路径问题
结果:图片,css 都不能正确显示。
1、因为网站根目录实际是public,所以如果想直接访问静态资源可以放到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
plugin/{插件}/public
foo
http://127.0.0.1:8787/app/foo/avatar.png
plugin/foo/public/avatar.png
3、如果实在想根据自己的目录来存放静态资源,可以通过设置路由的方法实现。 新建一个控制器PublicController.php如下:
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里加一条路由
config/route.php
Route::any('/app/view/assets/[{path:.+}]', [\app\controller\PublicController::class, 'index']);
这个时候就可以访问指定目录下的静态资源了
模板里不需要获取啊,直接像你那样写地址就行,实在不行加个配置文件 把这个路径写到配置文件里,再读取配置文件里的参数
html 模版怎么调用 $static_base_path 比如如下模板 <!doctype html> <html> <head> <meta charset="utf-8"> <title>webman</title> </head> <body> hello {$name} </body> </html>
我还是没明白你模板里要这个变量是干嘛用,如果只是为了写资源路径简短一点,完全可以在app/function.php里加一个方法函数,比如
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');?>
<?php echo static_base_path();?>/images/cai1.png
<?php echo static_base_path('/images/cai1.png');?>
只是想能够正确调用而已,如图https://www.workerman.net/upload/img/20240218/1865d1ce1301b9.png 调用结果不能正确显示。如果不用<?php echo static_base_path();?>/images/cai1.png ,如何写才能正确调用。
app/view/assets/images/cai1.png 不能正确显示
你直接打开 http://127.0.0.1:8787/app/view/assets/images/cai1.png 能打开图片吗? 如果不能打开,就在PublicController控制器里打印一些信息看看路由有没有定位成功。
http://127.0.0.1:8787/app/view/assets/images/cai1.png
PublicController
手册说静态文件不能使用 /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
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
如下:然后在
config/route.php
里加一条路由这个时候就可以访问指定目录下的静态资源了
模板里不需要获取啊,直接像你那样写地址就行,实在不行加个配置文件 把这个路径写到配置文件里,再读取配置文件里的参数
html 模版怎么调用 $static_base_path 比如如下模板
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>webman</title>
</head>
<body>
hello {$name}
</body>
</html>
我还是没明白你模板里要这个变量是干嘛用,如果只是为了写资源路径简短一点,完全可以在
app/function.php
里加一个方法函数,比如模板里使用的时候就是
<?php echo static_base_path();?>/images/cai1.png
,或者直播<?php echo static_base_path('/images/cai1.png');?>
只是想能够正确调用而已,如图https://www.workerman.net/upload/img/20240218/1865d1ce1301b9.png 调用结果不能正确显示。如果不用<?php echo static_base_path();?>/images/cai1.png ,如何写才能正确调用。
app/view/assets/images/cai1.png 不能正确显示
你直接打开
http://127.0.0.1:8787/app/view/assets/images/cai1.png
能打开图片吗? 如果不能打开,就在PublicController
控制器里打印一些信息看看路由有没有定位成功。手册说静态文件不能使用 /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