[TOC]
## 1、安裝`think-annotation`注解擴展以后報控制器不存在
報` \\app\\admin\\controller\\Index.php does not exist`確定了控制器無誤的情況下仍然報控制器不存在:
將`vendor\topthink\think-annotation\src\InteractsWithRoute.php`文件大致39行的`$dirs`變量做以下修改:
```
$dirs = [DIRECTORY_SEPARATOR . $this->app->getNamespace() . $this->app->config->get('route.controller_layer')]
+ $this->app->config->get('annotation.route.controllers', []);
```
## 2、swoole模式下安裝了`think-captcha`驗證碼擴展啟動服務以后,第一次刷新報控制器不存在,第二次刷新以后正常
修改文件`vendor\topthink\think-captcha\src\CaptchaService.php`
```
// 刪除Route $route依賴注入參數
public function boot()
{
// swoole模式下有坑 路由定義需要干掉
//Route::get('captcha/[:config]', "\\think\\captcha\\CaptchaController@index");
Validate::maker(function ($validate) {
$validate->extend('captcha', function ($value) {
return captcha_check($value);
}, ':attribute錯誤!');
});
}
```
需要使用驗證碼的應用,需要在當前應用下的路由文件添加上驗證碼的路由:
```
// 自行use think\facade\Route;
Route::get('/captcha/[:config]', "\\think\\captcha\\CaptchaController@index");
```
`config\app.php` 需要加上配置(wooadmin系統默認已經加上):
```
'app_express' => true,
```
我反正就是這樣解決了,又更好方法請告知!
3、woo命名空間失效
composer dumpautoload
## 3、后臺(中臺)的驗證碼不輸或亂輸為什么都可以登錄?

最早是會驗證的,后來有使用者說每次都輸入驗證碼麻煩就修改成了debug模式下不驗證驗證碼了。你項目開發完,把debug模式關閉了就會進行驗證了,所以不要慌,看上圖代碼你就懂了,其實也是為了你著想。
## 4、為什么數據權限設置了無效?
1、確定表中有admin_id字段
2、是不是有自行composer update?需要修改源碼
http://www.hmoore.net/laowu199/e_dev/1957961
## 5、排序不起作用了?
為了效率,系統列表查詢默認是沒有使用order by的;因此改變了`list_order`會感覺沒有排序效果。
如果你希望你的列表有排序,需要在模型管理中找到對應模型,為該模型設置下默認的排序方式。

## 6、確定模型關聯都設置正確了,列表還是不顯示關聯模型對應的名稱?
1、確定你是否真的理解hasOne,hasMany,belongsTo等關聯意義?
[http://www.hmoore.net/laowu199/e_dev/448632](http://www.hmoore.net/laowu199/e_dev/448632)
2、確定你模型關聯是否設置正確?

3、可以借鑒系統已有模型,比如Admin、User等,去依葫蘆畫瓢。
4、剛開始使用系統,模型不建議設置二級目錄名。
5、100%確定設置正確的情況下,還是不顯示呢?這個情況確實遇見過了,最后發現和tp模型屬性名有重名了,比如Data。因此,你可以隨便修改下模型關聯鍵名和設置關聯字段名再試試。
## 7、后臺"應用中心"403被拒絕訪問
方式一、如果是寶塔環境,估計是偽靜態配置造成的原因,找到站點對應的偽靜態配置文件,把"|application"刪除或修改為"|app"這樣application就可以訪問了。

方式二、V2.3.1以后給application控制器單獨定義了路由,因此可以手動修改url的方式來實現訪問
路由:
~~~
// 防止寶塔偽靜態禁用
Route::get('/app_center/:action', "Application/:action");
~~~
訪問:
比如:/run/Application/index.html可以通過把Application修改為"app_center"如:/run/app_center/index.html來進行訪問
## 8、cms中擴展模型如文章、相冊等字段上傳配置無效的解決辦法

無效的原因是后臺的操作其實都是cms.Document中進行操作,導致上傳底層不能正確獲取到對應的擴展模型,解決辦法就是給上傳字段明確當前對應的上傳模型通過給標簽加一個`data-model`來明確。你的實際模型是什么就寫什么,上圖只是以相冊為例。
## 9、所有layui模板語法中帶#生效?
```
// 這樣寫模板輸出值中有帶 # ,layui的問題會導致不解析,應該修改為后面的寫法
<div style="color:{{d.xxx ? '#f00':'#0f0'}}">xxxx</div>
<div {{# color=d.xxx ? '#f00':'#0f0'}} style="color:{{color}}"></div>
```
## 10、老版本的模型導出(2.3.4左右),然后新版本系統無法導入,提示"數據獲取失敗"?
由于導出時的TOKEN采用了RSA加密;由于新版本的加密做了優化,導致老版本的加密在新版本不能解密,從而報“數據獲取失敗”的提示。
將老版本的`woo\common\helper\Str`文件替換到最新(主要是`setEncrypt`和`setDecrypt`方法),然后老版本重新導出,新版再重新導入試試。
## 11、同一臺服務器部署多個項目并都使用的redis緩存引擎,導致數據串臺,如何解決?
同一臺服務器部署多個項目并都使用的redis緩存引擎(file引擎不影響),是因為使用了相同的緩存key導致多個項目有寫入或讀取同一個緩存數據導致了多個項目數據共享。可在`cache`配置文件中修改配置解決:
~~~
'redis' => [
// 驅動方式
'type' => 'Redis',
// 服務器地址
'host' => '127.0.0.1',
// 指定緩存到那個數據庫中 0 -16
'select' => 0,
// 緩存前綴
'prefix' => '',
// 緩存tag前綴
'tag_prefix' => 'tag:',
],
~~~
讓不同項目的prefix\tag_prefix不同即可。
## 12、business應用中,如何使用一個賬號關聯多個商家?
系統的business應用默認是不支持的,要求賬號必須是唯一的。如果需要一個賬號關聯多個商家,需要自行改造,這里分享下改造過程。
a、找到BusinessMember的username字段
去除unique數據表結構的限制,然后字段驗證規則:

確保mysql可以寫入多個相同賬號,加上商家唯一的驗證確保某個商家下某賬號是唯一的。
b、登錄頁面改進?businessMember/login:

登錄模板改進:



c、登錄接口改進 businessMember/ajaxLogin:
登錄提交以后:

