鍍金池/ 問答/PHP/ ThinkPHP5.1如何在模版中輸出public/static靜態(tài)資源文件的U

ThinkPHP5.1如何在模版中輸出public/static靜態(tài)資源文件的URL路徑?

因?yàn)檫@個(gè)項(xiàng)目有可能不放在WEB根目錄,會(huì)放在子目錄中,也有可能會(huì)經(jīng)常修改服務(wù)器的IP(這個(gè)項(xiàng)目在外網(wǎng)和內(nèi)網(wǎng)都有開放,但是外網(wǎng)和內(nèi)網(wǎng)開放的URL不同,甚至還做了虛擬目錄,這個(gè)需求確實(shí)有點(diǎn)奇怪),所以不能寫死在模版里面

我試過$_SERVER的script_filename,script_name,pathinfo,REQUEST_URI等變量,他們?cè)谑褂昧藀athinfo之后,會(huì)把pathinfo的信息也帶入進(jìn)去,導(dǎo)致使用dirname獲取這些變量所在目錄,獲取到的并不是真實(shí)的index.php所在的public目錄的URL

而且也不能通過判斷url中的index.php來確定,因?yàn)橛锌赡芊?wù)器還做了URL重寫,不一定在URL中存在index.php這個(gè)字符串,不能通過字符串切割來解決。

假如當(dāng)前頁面是192.168.1.1/subDir/index.php/index/admin/test,那么直接在模版里面寫static/js/的話會(huì)被瀏覽器解析到192.168.1.1/subDir/index.php/index/admin/test/static/js/上,所以這種方法無效

有什么其他辦法能獲取public/static靜態(tài)資源文件的URL路徑嗎?

我試過直接在模版里面寫__STATIC__或者_(dá)_ROOT__,結(jié)果都是直接瀏覽器里面原樣輸出

圖片描述
圖片描述

回答
編輯回答
拮據(jù)

兩種解決方法:
1.修改服務(wù)器 default_server 指向 subDir 目錄,ip訪問時(shí)就不用添加subDir路徑,局域網(wǎng)和公網(wǎng)訪問方式統(tǒng)一
2.寫一個(gè)方法針對(duì)局域網(wǎng)、公網(wǎng)訪問方式做判斷,針對(duì)兩種情況返回不同的host_name

2017年7月18日 05:33
編輯回答
小曖昧

你可以全局定義一些js變量,像這樣把模板變量放進(jìn)去就好了
clipboard.png

clipboard.png

2017年3月28日 11:28
編輯回答
柒喵

通過SF.GG官方交流群群友的幫助,最終找到解決方案。

在ThinkPHP的模版配置文件中使用如下配置

'tpl_replace_string'  =>  [
        '__STATIC__'=>$_SERVER['REQUEST_SCHEME'] .'://' . $_SERVER['HTTP_HOST'] . str_replace('/index.php' ,'' ,$_SERVER['SCRIPT_NAME']) . '/static',
    ],

然后在模版中直接使用__STATIC__常量即可,完美適配各種協(xié)議,各種子路徑,以及帶有pathinfo的情況

2017年4月3日 07:32
編輯回答
真難過
    // 視圖輸出字符串內(nèi)容替換
    'view_replace_str'       => [
        '__ADMIN__'=>'/static/admin',
    ],

在config.php 里加個(gè)自定義路徑就可以了

clipboard.png

2018年6月13日 01:21