Laravel 模塊化開發(fā)

一锅棕、安裝

composer require nwidart/laravel-modules

在composer 中配置:



配置完成后執(zhí)行:

composer dump-autoload

二写隶、基本使用

創(chuàng)建module:

php artisan module:make Blog

會在 Modules 目錄下創(chuàng)建出一個類似APP的目錄來诡曙,創(chuàng)建一個干凈的module可以使用 --plain 或者 -p 標記门怪。Lang View Config 在每個module中都有獨立的命名空間诅妹,例如:

三珍策、配置文件

框架自身帶有一些配置選項,首先發(fā)布配置文件:
發(fā)布配置文件 php artisan vendor:publish --provider="Nwidart\Modules\LaravelModulesServiceProvider"

  • Default namespace生成模塊時默認的命名空間
  • Overwrite the generated files覆蓋生成模塊時使用的默認生成存根宅倒。這對于定制不同文件的輸出非常有用拐迁。
  • Overwrite the paths覆蓋包中使用的默認路徑祟蚀。
  • Scan additional folders for modules這是默認禁用的鹏溯。一旦啟用匀借,包將在指定的路徑數(shù)組中查找模塊。
  • Composer file template文件模板composer
  • Caching如果您有許多模塊芒率,那么最好緩存這些信息(比如多個模塊)。例如多個module.json文件)化焕。
  • Registering custom namespace決定哪一個自定義命名空間需要使用package來注冊穗泵。如果某個設置為false,package不會處理它的注冊坐桩。

四闷叉、輔助方法

$path = module_path('Blog'); 獲取模塊路徑

五嘿期、命令行工具

實用命令:

  • module:make 創(chuàng)建一個新模塊
  • module:use 使用一個模塊(這允許執(zhí)行其他命令時不用輸入模塊名)
  • module:unuse 和上面相反
  • module:list 列出所有可用模塊
  • module:migrate 執(zhí)行某個模塊的數(shù)據(jù)遷移(或者所有模塊的)
  • php artisan module:migrate-rollback Blog 執(zhí)行模塊最近一次遷移的回滾
  • php artisan module:migrate-refresh Blog 執(zhí)行模塊所有回滾后執(zhí)行所有遷移
  • php artisan module:migrate-reset Blog 執(zhí)行模塊所有回滾
  • php artisan module:seed Blog 執(zhí)行模塊數(shù)據(jù)填充
  • php artisan module:publish-migration Blog 發(fā)布遷移
  • php artisan module:publish-config Blog 發(fā)布配置
  • php artisan module:publish-translation Blog 發(fā)布語言包
  • php artisan module:enable Blog 開啟模塊
  • php artisan module:disable Blog 關閉模塊
  • php artisan module:update Blog 升級模塊

生成器命令:

  • php artisan module:make-command CreatePostCommand Blog
  • php artisan module:make-migration create_posts_table Blog
  • php artisan module:make-seed seed_fake_blog_posts Blog
  • php artisan module:make-controller PostsController Blog
  • php artisan module:make-model Post Blog (可以使用-m同步生成遷移文件)
  • php artisan module:make-provider BlogServiceProvider Blog
  • php artisan module:make-middleware CanReadPostsMiddleware Blog
  • php artisan module:make-mail SendWeeklyPostsEmail Blog
  • php artisan module:make-notification NotifyAdminOfNewComment Blog
  • php artisan module:make-listener NotifyUsersOfANewPost Blog
  • php artisan module:make-listener NotifyUsersOfANewPost Blog --event=PostWasCreated
  • php artisan module:make-listener NotifyUsersOfANewPost Blog --event=PostWasCreated --queued
  • php artisan module:make-request CreatePostRequest Blog
  • php artisan module:make-event BlogPostWasUpdated Blog
  • php artisan module:make-job JobName Blog(可以使用-sync生成同步任務)
  • php artisan module:route-provider Blog 為指定的模塊生成給定的路由服務提供程序脊串。
  • php artisan module:make-factory FactoryName Blog
  • php artisan module:make-policy PolicyName Blog
  • php artisan module:make-rule ValidationRule Blog
  • php artisan module:make-resource PostResource Blog
  • php artisan module:make-resource PostResource Blog --collection
  • php artisan module:make-test EloquentPostRepositoryTest Blog

六篡悟、門面方法

  • Module::all(); 獲取所有模塊
  • Module::getCached() 獲取所有緩存的模塊
  • Module::getOrdered(); 獲取排序后的所有模塊(按照module.json文件中的priority排序)
  • Module::scan(); 獲取掃描過的模塊
  • Module::find('name'); 查詢某個模塊(返回Module類)
  • Module::get('name');
  • Module::findOrFail('module-name');
  • Module::getScanPaths(); 獲取掃描的路徑
  • Module::toCollection(); 獲取模塊集合
  • Module::getByStatus(1); 按照狀態(tài)獲取模塊(1可用0不可用)
  • Module::has('blog'); 判斷模塊是否存在
  • Module::allEnabled(); 獲取所有可用模塊
  • Module::allDisabled();
  • Module::count(); 統(tǒng)計模塊數(shù)量
  • Module::getPath(); 獲取模塊路徑
  • Module::register(); 注冊模塊
  • Module::boot(); 初始化模塊
  • Module::collections(); 獲取所有可用模塊的集合
  • Module::getModulePath('name'); 獲取某個模塊路徑
  • Module::assetPath('name'); 獲取某個模塊的資源路徑
  • Module::config('composer.vendor'); 從這個包中獲取配置值码倦。
  • Module::getUsedStoragePath(); 獲取使用的存儲路徑。
  • Module::getUsedNow(); 獲取cli會話正在使用的模塊诊胞。
  • Module::getUsed();
  • Module::setUsed('name'); 設置會話使用的模塊
  • Module::asset('blog:img/logo.img'); 從某個模塊獲取資源路徑
  • Module::install('nwidart/hello'); 根據(jù)給定的模塊名稱安裝指定的模塊。
  • Module::update('hello'); 更新指定模塊的依賴項。
    將宏添加到模塊存儲庫。
Module::macro('hello', function() {
    echo "I'm a macro";
});
  • Module::hello(); 調(diào)用宏
  • Module::getRequirements('module name'); 獲取依賴的其他模塊

七熙宇、模塊Module方法

  • $module = Module::find('blog');
  • $module->getName();
  • $module->getLowerName();
  • $module->getStudlyName();
  • $module->getPath(); 模塊路徑
  • $module->getExtraPath('Assets'); 模塊其他路勁
  • $module->disable();
  • $module->enable();
  • $module->delete();
  • $module->getRequires(); 獲取模塊依賴的其他模塊

八赊时、發(fā)布模塊

將模塊以composer包的形式發(fā)布

  1. 創(chuàng)建一個模塊
  2. 確保 type 屬性在 composer.json 文件中申明為 laravel-module
  3. 包名必須以 -module 結(jié)尾湿故,例如 <namespace>/<name>-module,將會被自動安裝到 Module/<name> 目錄
  4. 發(fā)布到packagist

你需要執(zhí)行額外一步確保模塊安裝到 Modules 目錄下
安裝 joshbrw/laravel-module-installer 插件忧设,它會將文件自動移動到 Modules 目錄

九谨垃、發(fā)布模塊資源文件

模塊可以像其他包一樣發(fā)布文件(創(chuàng)建模塊時不能使用 -plain 標志)

發(fā)布配置:

發(fā)布視圖:


核心部分是loadViewsFrom方法的調(diào)用

發(fā)布語言包:

如果你想使用laravel工廠,你必須在你的服務提供商中添加以下內(nèi)容:

十硼控、模塊命令行指令

回顧一下創(chuàng)建模塊命令:
php artisan module:make-command CreatePostCommand Blog

您可以使用commands為laravel方法注冊命令刘陶,該方法在服務提供者類中可用。

#

十一牢撼、模塊事件

回顧一下創(chuàng)建模塊事件和監(jiān)聽器:

php artisan module:make-event BlogPostWasUpdated Blog
php artisan module:make-listener NotifyAdminOfNewPost Blog

之后需要在laravel中注冊他們匙隔,有兩種辦法:

  1. 手動在模塊的服務提供者中調(diào)用
    $this->app['events']->listen(BlogPostWasUpdated::class, NotifyAdminOfNewPost::class);
  2. 在app/命名空間下為模塊創(chuàng)建一個事件服務提供者(EventServiceProvider)包含他的所有事件

不要忘記加載此服務提供者,將其添加到module.json文件中熏版。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纷责,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子撼短,更是在濱河造成了極大的恐慌再膳,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件曲横,死亡現(xiàn)場離奇詭異饵史,居然都是意外死亡,警方通過查閱死者的電腦和手機胜榔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來湃番,“玉大人夭织,你說我怎么就攤上這事》痛椋” “怎么了尊惰?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我弄屡,道長题禀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任膀捷,我火速辦了婚禮迈嘹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘全庸。我一直安慰自己秀仲,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布壶笼。 她就那樣靜靜地躺著神僵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪覆劈。 梳的紋絲不亂的頭發(fā)上保礼,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音责语,去河邊找鬼炮障。 笑死,一個胖子當著我的面吹牛鹦筹,可吹牛的內(nèi)容都是我干的铝阐。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼铐拐,長吁一口氣:“原來是場噩夢啊……” “哼徘键!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起遍蟋,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤吹害,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后虚青,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體它呀,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年棒厘,在試婚紗的時候發(fā)現(xiàn)自己被綠了纵穿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡奢人,死狀恐怖谓媒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情何乎,我是刑警寧澤句惯,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布土辩,位于F島的核電站,受9級特大地震影響抢野,放射性物質(zhì)發(fā)生泄漏拷淘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一指孤、第九天 我趴在偏房一處隱蔽的房頂上張望启涯。 院中可真熱鬧,春花似錦邓厕、人聲如沸逝嚎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽补君。三九已至,卻和暖如春昧互,著一層夾襖步出監(jiān)牢的瞬間挽铁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工敞掘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留叽掘,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓玖雁,卻偏偏與公主長得像更扁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赫冬,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容