誰可以提供下thinkphp的跨模組呼叫的詳細說明或者

時間 2021-12-19 18:34:59

1樓:癲狂蚊子

a()是例項化乙個action,這樣你可以呼叫相對action裡面的方法,r是直接呼叫的!!!

2樓:匿名使用者

事實上,a 方法迓支援跨分組戒者跨專案呼叫,預設情冴下是呼叫當前專案下面癿模組。

跨專案呼叫癿格式是:

a('[專案名://][分組名/]模組名')

a('user') 表示呼叫當前專案癿user 模組

a('admin://user') 表示呼叫admin 專案癿user 模組

a('admin/user') 表示呼叫admin 分組癿user 模組

a('admin://tool/user') 表示呼叫admin 專案tool 分組癿user 模組

r 方法表示呼叫乙個模組癿某個操作方法,呼叫格式是:

r('[專案名://][分組名/]模組名/操作名',array('引數1','引數2'…))

r('user/info') 表示呼叫當前專案癿user 模組癿info 操作方法

r('admin/user/info') 表示呼叫admin 分組癿user 模組癿info 操作方法

r('admin://tool/user/info') 表示呼叫admin 專案tool 分組癿user 模組癿info 操作方法

r 方法迓支援對呼叫癿操作方法需要傳入引數,例如user 模組中我們定丿了乙個info 方法:

class useraction extends action

}接下來,我們可以在其他模組中呼叫:

r('user/info',array(15))

表示呼叫當前專案癿user 模組癿info 操作方法,開丏id 引數傳入15

建議你看看thinkphp3.0_完全開發手冊

誰能提取乙個thinkphp5.0運算元據庫的m完整用法

3樓:紅豆屆

m方法用於例項化乙個基礎模型類,和d方法的區別在於:

1、不需要自定義模型類,減少io載入,效能較好;

2、例項化後只能呼叫基礎模型類(預設是model類)中的方法;

3、可以在例項化的時候指定表字首、資料庫和資料庫的連線資訊;

d方法的強大則體現在你封裝的自定義模型類有多強,不過隨著新版thinkphp框架的基礎模型類的功能越來越強大,m方法也比d方法越來越實用了。

m方法的呼叫格式:

m('[基礎模型名:]模型名','資料表字首','資料庫連線資訊')

我們來看下m方法具體有哪些用法:

1、例項化基礎模型(model) 類

在沒有定義任何模型的時候,我們可以使用下面的方法例項化乙個模型類來進行操作:

//例項化user模型

$user = m('user');

//執行其他的資料操作

$user->select();

這種方法最簡單高效,因為不需要定義任何的模型類,所以支援跨專案呼叫。缺點也是因為沒有自定義的模型類,因此無法寫入相關的業務邏輯,只能完成基本的curd操作。

$user = m('user');

其實等效於:

$user = new model('user');

表示操作think_user表。m方法和d方法一樣也有單例功能,多次呼叫並不會重複例項化。m方法的模型名引數在轉換成資料表的時候會自動轉換成小寫,也就是說thinkphp的資料表命名規範是全小寫的格式。

2、例項化其他公共模型類

第一種方式例項化因為沒有模型類的定義,因此很難封裝一些額外的邏輯方法,不過大多數情況下,也許只是需要擴充套件一些通用的邏輯,那麼就可以嘗試下面一種方法。

$user = m('commonmodel:user');

改用法其實等效於:

$user = new commonmodel('user');

因為系統的模型類都能夠自動載入,因此我們不需要在例項化之前手動進行類庫匯入操作。模型類commonmodel必須繼承model。我們可以在commonmodel類裡面定義一些通用的邏輯方法,就可以省去為每個資料表定義具體的模型類,如果你的專案已經有超過100個資料表了,而大多數情況都是一些基本的curd操作的話,只是個別模型有一些複雜的業務邏輯需要封裝,那麼第一種方式和第二種方式的結合是乙個不錯的選擇。

3、傳入表字首、資料庫和其他資訊

m方法有三個引數,第乙個引數是模型名稱(可以包括基礎模型類和資料庫),第二個引數用於設定資料表的字首(留空則取當前專案配置的表字首),第三個引數用於設定當前使用的資料庫連線資訊(留空則取當前專案配置的資料庫連線資訊),例如:

$user = m('db2.user','think_');

表示例項化model模型類,並操作db2資料庫中的think_user表。

如果第二個引數留空或者不傳,表示使用當前專案配置中的資料表字首,如果操作的資料表沒有表字首,那麼可以使用:

$user = m('db1.user',null);

表示例項化model模型類,並操作db1資料庫中的user表。

如果你操作的資料庫需要不同的使用者賬號,可以傳入資料庫的連線資訊,例如:

$user = m('user','think_','mysql://user_a:1234@localhost:3306/thinkphp');

表示基礎模型類用model,然後對think_user表進行操作,用user_a賬號進行資料庫連線,運算元據庫是thinkphp。

第三個連線資訊引數可以使用dsn配置或者陣列配置,甚至可以支援配置引數。

例如,在專案配置檔案中配置了:

'db_config'=>'mysql://user_a:1234@localhost:3306/thinkphp';

則可以使用:

$user = m('user','think_','db_config');

基礎模型類和資料庫可以一起使用,例如:

$user = m('commonmodel:db2.user','think_');

如果要例項化分層模型的話,利用公共模型類的方式,我們可以使用:

m('userlogic:user');

來例項化userlogic,雖然這樣做的意義不大,因為可以用

d('user','logic');

實現同樣的功能。

thinkphp函式詳解:r方法

r方法用於呼叫某個控制器的操作方法,是a方法的進一步增強和補充。關於a方法的用法見這裡。

r方法的呼叫格式:

r('[專案://][分組/]模組/操作','引數','控制器層名稱')

例如,我們定義了乙個操作方法

class useraction extends action

}那麼就可以通過r方法在其他控制器裡面呼叫這個操作方法(一般r方法用於跨模組呼叫)

$data = r('user/detail',array('5'));

表示呼叫user控制器的detail方法(detail方法必須是public型別),返回值就是查詢id為5的乙個使用者資料。如果你要呼叫的操作方法是沒有任何引數的話,第二個引數則可以留空,直接使用

$data = r('user/detail');

也可以支援跨分組和專案呼叫,例如:

r('admin/user/detail',array('5'));

表示呼叫admin分組下面的user控制器的detail方法。

r('admin://user/detail',array('5'));

表示呼叫admin專案下面的user控制器的detail方法。

官方的建議是不要在同一層多太多呼叫,會引起邏輯的混亂,被公共呼叫的部分應該封裝成單獨的介面,可以借助3.1的新特性多層控制器,單獨新增乙個控制器層用於介面呼叫,例如,我們增加乙個api控制器層,

class userapi extends action

}然後,使用r方法呼叫

$data = r('user/detail',array('5'),'api');

也就是說,r方法的第三個引數支援指定呼叫的控制器層。

同時,r方法呼叫操作方法的時候可以支援操作字尾設定c('action_suffix'),如果你設定了操作方法字尾,仍然不需要更改r方法的呼叫方式。

thinkphp中action 的方法怎麼多執行緒執行

4樓:

可以用tp自帶的後置函式,例如你想在執行完index模組的display()就執行pageshow()方法就可以這麼寫

<?php

class indexaction extends actionfunction _after_display()}?>

但是如果在display()方法中有中斷或者錯誤等跳轉函式的話,它的後置函式式不會執行的

thinkphp3.1.2為什麼location只能表示當前模組下的方法

5樓:龍氏風采

跨模組呼叫

在開發過程中經常會在當前模組呼叫其他模組的方法,這個時候就涉及到跨模組呼叫,我們還可以了解到a和r兩個快捷方法的使用。

例如,我們在index模組呼叫user模組的操作方法class indexaction extends action

}因為系統會自動載入action控制器,因此 我們不需要匯入useraction類就可以直接例項化。

並且為了方便跨模組呼叫,系統內建了a方法和r方法。

a方法表示例項化某個模組,例如,上面的方法可以改為:

class indexaction extends action}4

事實上,a方法還支援跨分組或者跨專案呼叫,預設情況下是呼叫當前專案下面的模組。

跨專案呼叫的格式是:

a('[專案名://][分組名/]模組名')

例如:a('user') //表示呼叫當前專案的user模組

a('admin://user') //表示呼叫admin專案的user模組

a('admin/user') //表示呼叫admin分組的user模組

a('admin://tool/user') //表示呼叫admin專案tool分組的user模組

r方法表示呼叫乙個模組的某個操作方法,呼叫格式是:

r('[專案名://][分組名/]模組名/操作名',array('引數1','引數2'…))

例如:r('user/info') //表示呼叫當前專案的user模組的info操作方法

r('admin/user/info') //表示呼叫admin分組的user模組的info操作方法

r('admin://tool/user/info') //表示呼叫admin專案tool分組的user模組的info操作方法

r方法還支援對呼叫的操作方法需要傳入引數,例如user模組中我們定義了乙個info方法:

class useraction extends action

}接下來,我們可以在其他模組中呼叫:

r('user/info',array(15))

表示呼叫當前專案的user模組的info操作方法,並且id引數傳入15

誰可以給我提供白狼一些,誰可以給我提供白狼一些資料

鍾離鬱鬱 你說的是不是紐芬蘭狼,這是一種於1911年滅絕的狼種 紐芬蘭狼一種非常美麗的大型狼種,唯一毛色全白的種.這種狼的資料很少很少,畢竟留下來的只是傳說而已,我只能提供給你一些狼的基本資料,希望對你有所幫助 生活習性 狼集群或單獨活動。在繁殖季節整合小群,冬季在北美泰加林區狼常組成較大群捕食食有...

能提供一些世界著名的汽車品牌嗎,誰可以提供一些世界著名汽車品牌與標誌?

一樓說的是集團 其實每個集團下有很多品牌 比如賓士就是戴姆勒 克萊斯勒公司的 勞斯萊斯現在已經加入寶馬集團 給你一個按字母排序的列表吧 a阿爾法 羅米歐 alfa romeo 奧迪 audi 阿斯頓 馬丁 aston martin b寶馬 bmw 賓利 bentley 別克 buick 布加迪 bu...

誰可以提供呂布,趙雲,關羽的出生和死亡年月

關羽 約公元160年 219年 生於東漢桓帝延熹年間,字雲長,本字長生,河東解良人 今山西運城市 三國時期蜀漢著名將領。死後受民間推崇,又經歷代朝廷褒封,被人奉為關聖帝君,佛教稱為伽藍菩薩。三國時期蜀國名將。被後來的統治者崇為 武聖 與號為 文聖 的孔子齊名。後人有詩稱讚關羽 趙雲 229 字子龍,...