亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 建站經驗 > 正文

Drupal8模塊開發之路由、控制器和菜單鏈接教程

2024-08-30 19:06:43
字體:
來源:轉載
供稿:網友

隨著 php5 面向對象的完善,現在很多php主流框架都往面向對象發展。Drupal8為了適應新php主題框架的需要,也將用面向對象的方式取代面向過程,在Proudly Found Elsewhere的倡議下,Dupal8包含了很多看起來不像是為了drupal開發的的代碼。

其中最大的變化是引入了Symfony框架,這對開發人員來說,會產生兩個重大影響

首先,這可能將會大大增加Drupal開發者的數量,比如那些曾經自認為是大師,不屑于面向過程開發的傳統"高端程序猿",現在Drupal8,也是面向對像了,也用了新框架,他們已經沒有理由拒絕加入drupal開發者的行列

第二,新的框架內核變化,會給現在那些沒有多少PHP現代框架開發經驗的人許多恐懼,他們會擔心自己不能適應這種開發方式的巨大轉變,但是沒關系,我們都需要重新學習,學習Symfony框架,還有充滿希望的Drupal8, 像其他PHP框架一樣,它們都是很容易擴展的,我們要給自己信心。

在目前,Drupal 8 還在其發布周期中,目前最新的版本是alpha12,我們會基于這個版本,來展示一些Drupal 7開發者會先遇到的一些基本變化,我們應該先熟悉這些基本變化。

我怎樣創建一個模塊?

我們第一件事是要確定必須的文件和文件夾結構來告訴Drupal8識別我們的新模塊。在Drupal 7 里,我們必須創建至少2個文件(.info 和 .module文件),但是在Drupal 8里,.info文件替換成了.info.yml,文件里的內容數據信息相同,但格式略有差異。

另一個主要變化是,自定義模塊和第三方貢獻模塊文件夾的存放位置現在被放到了根目錄下的modules/,這是因為所有核心的代碼已經被移動到了它單獨的文件夾core/,當然,在根目錄下的modules文件夾內,我們依然鼓勵你像以往的Drupal 7 一樣,可以創建 custom 和contrib 子文件夾來分別存放你的自定義模塊和官網下載的第三方模塊。

讓我們繼續,我們現在先來學習創建一個叫demo(非常簡單)的模塊,并把它放到modules/custom/文件夾下,正如我之前所提到的,我們需要在這個新創建的demo/文件夾里,創建一個 demo.info.yml 文件,并在文件里輸入以下代碼:

  1. name: Drupal 8 Demo module 
  2. description: 'Demo module for Drupal 8 alpha12' 
  3. type: module 
  4. core: 8.x 

這些大部分你應該看著很熟悉吧(name, description and core), type 字段也是現在必須有的一項,它的值可以是module,theme,theme_engine分別定義此文件類型是模塊,還是主題或者模板引擎,另外要注意的一件重要的細節是,注意yml文件里的空格,正確縮進可以像數組一樣組織數據。

你可以查看此文檔 (https://www.drupal.org/node/2000204)說里其他可用的key|value , 然后打開一個模塊文件夾下的.info.yml文件,嘗試改變key|value,這里是官方的變更說明 (https://www.drupal.org/node/1935708)

現在,只要有這一個文件就足夠了,你可以進入導航菜單下的Extend(擴展)頁,找到Demo模塊,并啟用它。

正如我之前提到的,現在我不需要再創建一個.module的文件,drupal 8就已經可以識別此模塊了,因為在drupal 8里,.module文件已經不再是必須存在的文件。因為現在大部分的業務邏輯代碼都轉移到了service類,控制器和插件里,我們稍后會看到這一點。

什么是路由?調用hook_menu()會發生什么?它的回調怎么工作?

在drupal 7里,hook_menu()可能是最能實現這些功能需求的鉤子,因為它就是被用于設定路徑并且把這些路徑和回調函數連接起來,它也用來創建菜單鏈接和其他一些東西

在Drupal 8里,我們不再需要hook_menu()了,因為我們會大量使用Symfony2的組件來處理路由,這涉及定義一個路由配置和在控制器里處理一個回調(Controller類的方法), 讓我們來實際看下它是如何工作的,我們來創建一個簡單的頁面來輸出那句程序界的永恒經典:Hello world!

首先,我們需要為我們的模塊創建一個路由文件:demo.routing.yml ,這個文件也是放在demo模塊根目錄下,在這個文件里,我們可以有如下(簡單)路由設定:

  1. demo.demo: 
  2.   path: '/demo' 
  3.   defaults: 
  4.     _content: 'DrupaldemoControllerDemoController::demo' 
  5.     _title: 'Demo' 
  6.   requirements: 
  7.     _permission: 'access content' 

第一行代碼是一個新路由的開始,這個路由的名字叫做demo(原作者真蛋疼,你就不能取一個不一樣的路由名嘛,非要和模塊名一樣,你讓我的小伙伴誤會了怎么辦?),第一個是demo是模塊名,第二個demo是路由名.

第二行path, 我們指定了這個路由的注冊路徑。

第三行defaults默認設置,我們設定了兩件事:默認的頁面標題(_title)和引用一個DemoController類的一個方法(_content)

第四行requirements要求,我們指定了用戶需要有什么權限才能查看該頁面。

你可以查此文檔 (https://www.drupal.org/node/2092643)知道你還可以在這個路由文件里設定哪些選項。

現在,讓我們來創建第一個叫做DemoController的控制器,并且它包含了一個方法叫做:demo(),用于當用戶訪問該頁面時調用此方法。

在模塊目錄里,創建一個src的文件夾和一個Controller的文件夾,這就是我們存放controller類的地方,好了,進入Controller文件夾,創建文件:DemoController.php。

該控制器的位置,正如我們將看到的一樣,把其他類放入src文件夾里是采用PSR-4標準的一部分,在之前,我們有一個更深層更大的文件夾結構(PSR-0標準),但現在有一個過渡階段,這兩種標準的文件夾結構路徑都會起作用,所以你如果看到代碼類仍然被放在lib/文件夾下,不用覺得奇怪,那是PSR-0標準。

在DemoController.php文件里,我們可以聲明我們的類了:

  1. <?php 
  2. /** 
  3.  * @file 
  4.  * Contains DrupaldemoControllerDemoController. 
  5.  */ 
  6.  
  7. namespace DrupaldemoController; 
  8.  
  9. /** 
  10.  * DemoController. 
  11.  */ 
  12. class DemoController { 
  13.   /** 
  14.    * Generates an example page. 
  15.    */ 
  16.   public function demo() { 
  17.     return array
  18.       '#markup' => t('Hello World!'), 
  19.     ); 
  20.   }       
  21. ?> 

這是我們為了在一個頁面上顯示"Hello World!"的一個結構最簡單的實例,在頂部,我們指定了類的命名空間,在下面,我們聲明了我們的類

在DemoController類里,我們只需要demo()方法,用來返回一個像以往的drupal 7里一樣的渲染數組,沒有大量的東西,現在我們要做的就是清空緩存,并在瀏覽器里輸入地址:http://example.com/demo ,然后我們就應該可以看到一個輸出有Hello World!的頁面!

怎么創建菜單鏈接?

在Drupal 7里,為了讓菜單鏈接顯示在網站上,我們可以在實施hook_menu()時,添加已經注冊過的路徑,但在Drupal8里,這個不再需要用hook來處理,我們可以像配置一樣使用一個yml文件來聲明菜單鏈接

讓我們來看看,該怎樣創建一個菜單鏈接來顯示在Structure(結構)管理菜單下,首先,我們在我們的模塊根目錄下創建一個demo.menu_links.yml 文件,在這個文件中,我們將設定菜單鏈接和在現有網站菜單上的位置,為了實現我們所要做的,我們需要在文件里輸入以下代碼:

  1. demo.demo: 
  2. title: Demo Link 
  3. description: 'This is a demo link' 
  4. parent: system.admin_structure 
  5. route_name: demo.demo 

這又是一個基于縮進的yml結構文件,第一行我們定義了模塊的菜單鏈接的機器名(就像之前定義路由一樣),接下來,我們設定了鏈接的標題,描述,父菜單路徑(作為子菜單放在該父菜單下),以及該菜單關聯的路由名。

父菜單選項的值是父菜單路徑(通它的所屬模塊附加),你想找個這個父菜單鏈接,你需要查找一些類似的*.menu_links.yml文件,因為這里的值是system.admin_structure,所以我就可以知道,它肯定是由核心的System模塊設定的,所以你就可以判斷這個父菜單鏈接存在于system.menu_links.yml文件里。

route_name是我們想要為這個菜單關聯的路由名(這們之前創建的),當你清空緩存后,然后輸入瀏覽器地址:http://example.com/admin/structure你應該可以看到一個新的菜單標題和描述,并且此鏈接是鏈接到demo/path的,怎么樣,很不錯吧?

結論:在這篇文章中,我們開始討論Drupal 8 的模塊開發,在這個階段(alpha12發布),正是開始學習怎樣使用新的API接口來開發貢獻模塊,為此,我會大家一起退出傳統框架的思維,用全新的思維一起探索學習Drupal 8的變化。

首先,我們了解了一些基礎知識,如何啟動一個Drupal8模塊(文件和文件夾結構等),所有這些與Drupal 7的不同之處,我們還看到了如何設定路由和一個控制器類的方法來調用一個路由地址,最后,我們已經看到了如何創建一個使用我們所定義路由的菜單鏈接。

在接下來的教程中,我們將繼續構建完善這個模塊,并期待發現在Drupal8中其他一些很酷的東西,我們將看到我們如何創建區塊和如何配合使用表單和配置管理系統,下期見。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲综合色av| 国产一区二区三区视频在线观看| 在线视频国产日韩| 欧美极品美女视频网站在线观看免费| 国产在线精品自拍| 欧美日韩国产限制| 亚洲国产精品电影在线观看| 国产精品高清在线| 日韩av一区在线| 8090理伦午夜在线电影| 国产成人精品久久亚洲高清不卡| 国产精品视频免费在线观看| 日韩专区在线播放| 成人国产精品免费视频| 精品中文视频在线| 久久亚洲私人国产精品va| 色爱av美腿丝袜综合粉嫩av| 国产精品成人在线| 97婷婷大伊香蕉精品视频| 久久久噜久噜久久综合| 91精品国产乱码久久久久久蜜臀| 日韩中文字幕不卡视频| 午夜精品久久久99热福利| 精品福利在线视频| 91九色国产社区在线观看| 日韩专区在线播放| 亚洲自拍另类欧美丝袜| 永久免费毛片在线播放不卡| 亚洲精品中文字| 亚洲国产精品中文| 国产福利视频一区二区| 成人午夜激情免费视频| 欧美激情奇米色| 亚洲毛片一区二区| 欧美放荡办公室videos4k| 91精品国产色综合久久不卡98| 亚洲第一页自拍| 欧美有码在线观看视频| 欧美午夜女人视频在线| 国产精品久久二区| 国产亚洲aⅴaaaaaa毛片| 92版电视剧仙鹤神针在线观看| 国产精品久久久久久久av大片| 亚洲色图色老头| 国产一区红桃视频| 日韩免费观看av| 日韩免费在线看| 日韩黄色在线免费观看| 久久99国产综合精品女同| 久久精品小视频| 国产成人一区二区三区电影| 日韩精品免费在线播放| 91成品人片a无限观看| 日韩成人中文字幕| 国产69精品久久久久9| 亚洲女在线观看| 国产亚洲精品日韩| 另类专区欧美制服同性| 91欧美精品午夜性色福利在线| 欧美网站在线观看| 国产精品免费观看在线| 亚洲精品一区二区久| 亚洲第一区第二区| 欧美极品少妇与黑人| 日韩中文字幕国产精品| 亚洲美女在线看| 国产一区二区丝袜| 日韩中文字幕免费视频| 亚洲影院色在线观看免费| 国产91精品久| 精品高清美女精品国产区| 精品久久久久久亚洲精品| 97视频在线观看播放| 97在线观看视频| 成人黄色在线播放| 国产欧美日韩精品丝袜高跟鞋| 亚洲免费电影在线观看| 98精品在线视频| 亚洲人成免费电影| 91精品国产高清久久久久久91| 欧美精品午夜视频| 欧美日韩成人精品| 日韩在线视频线视频免费网站| 中文字幕少妇一区二区三区| 91久久国产综合久久91精品网站| 久久91精品国产91久久跳| 欧美疯狂做受xxxx高潮| 欧美日韩国产丝袜美女| 国产精品户外野外| 日韩精品在线视频观看| 国语自产精品视频在线看抢先版图片| 亚洲综合色av| 国产精品视频久久久| 亚洲精品国产精品国自产观看浪潮| 米奇精品一区二区三区在线观看| 奇米成人av国产一区二区三区| 国产经典一区二区| 欧美wwwwww| 亚洲国产日韩欧美在线图片| 人妖精品videosex性欧美| 国产精品成人免费电影| 久久久人成影片一区二区三区| 亚洲人成在线观| 成人妇女淫片aaaa视频| 久久免费成人精品视频| 一区二区三区视频观看| 国产69精品久久久久99| 国产视频在线一区二区| 亚洲一区二区三区视频| 国产日韩在线精品av| 国产精品一久久香蕉国产线看观看| 欧美黄网免费在线观看| 国外成人在线视频| 精品久久久久久久久久| 北条麻妃在线一区二区| 国产成人福利视频| xvideos成人免费中文版| 午夜精品福利电影| 亚洲欧美日韩一区在线| 国产精品视频免费在线观看| 国产999在线观看| 91po在线观看91精品国产性色| 日韩毛片在线看| 亚洲视频777| 中文字幕亚洲无线码a| 亚洲白拍色综合图区| 懂色aⅴ精品一区二区三区蜜月| 在线播放国产精品| 久久99精品久久久久久青青91| 国产成人免费av| 成人免费自拍视频| 久久理论片午夜琪琪电影网| 91视频国产高清| 九九热精品视频| 韩剧1988在线观看免费完整版| 亚洲欧美日韩久久久久久| 国产欧美最新羞羞视频在线观看| 91久久久久久| 这里只有精品在线观看| 久久久久久久久久久免费| 亚洲精品成人久久久| 91久久久久久久久久久久久| 日韩成人久久久| 日韩精品在线观看一区二区| 欧美成人性色生活仑片| 国产精品美女午夜av| 欧美精品久久一区二区| 91九色单男在线观看| 欧美日韩国产精品| 欧美激情xxxx性bbbb| 亚洲综合小说区| 国产精品入口免费视| 久久国产精品影片| 日韩欧美亚洲范冰冰与中字| 欧美精品精品精品精品免费| 欧美在线亚洲一区| 久久精品久久久久久国产 免费| 在线视频亚洲欧美| 亚洲成av人影院在线观看| 久久久久久久色| 欧美日韩黄色大片| 亚洲精品久久久久久久久久久久| 成人美女av在线直播| 久久精品在线视频|