国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 網(wǎng)站 > 建站經(jīng)驗(yàn) > 正文

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

2024-08-30 19:06:43
字體:
供稿:網(wǎng)友

隨著 php5 面向?qū)ο蟮耐晟疲F(xiàn)在很多php主流框架都往面向?qū)ο蟀l(fā)展。Drupal8為了適應(yīng)新php主題框架的需要,也將用面向?qū)ο蟮姆绞饺〈嫦蜻^程,在Proudly Found Elsewhere的倡議下,Dupal8包含了很多看起來不像是為了drupal開發(fā)的的代碼。

其中最大的變化是引入了Symfony框架,這對(duì)開發(fā)人員來說,會(huì)產(chǎn)生兩個(gè)重大影響

首先,這可能將會(huì)大大增加Drupal開發(fā)者的數(shù)量,比如那些曾經(jīng)自認(rèn)為是大師,不屑于面向過程開發(fā)的傳統(tǒng)"高端程序猿",現(xiàn)在Drupal8,也是面向?qū)ο窳耍灿昧诵驴蚣埽麄円呀?jīng)沒有理由拒絕加入drupal開發(fā)者的行列

第二,新的框架內(nèi)核變化,會(huì)給現(xiàn)在那些沒有多少PHP現(xiàn)代框架開發(fā)經(jīng)驗(yàn)的人許多恐懼,他們會(huì)擔(dān)心自己不能適應(yīng)這種開發(fā)方式的巨大轉(zhuǎn)變,但是沒關(guān)系,我們都需要重新學(xué)習(xí),學(xué)習(xí)Symfony框架,還有充滿希望的Drupal8, 像其他PHP框架一樣,它們都是很容易擴(kuò)展的,我們要給自己信心。

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

我怎樣創(chuàng)建一個(gè)模塊

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

另一個(gè)主要變化是,自定義模塊和第三方貢獻(xiàn)模塊文件夾的存放位置現(xiàn)在被放到了根目錄下的modules/,這是因?yàn)樗泻诵牡拇a已經(jīng)被移動(dòng)到了它單獨(dú)的文件夾core/,當(dāng)然,在根目錄下的modules文件夾內(nèi),我們依然鼓勵(lì)你像以往的Drupal 7 一樣,可以創(chuàng)建 custom 和contrib 子文件夾來分別存放你的自定義模塊和官網(wǎng)下載的第三方模塊。

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

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

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

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

現(xiàn)在,只要有這一個(gè)文件就足夠了,你可以進(jìn)入導(dǎo)航菜單下的Extend(擴(kuò)展)頁,找到Demo模塊,并啟用它。

正如我之前提到的,現(xiàn)在我不需要再創(chuàng)建一個(gè).module的文件,drupal 8就已經(jīng)可以識(shí)別此模塊了,因?yàn)樵赿rupal 8里,.module文件已經(jīng)不再是必須存在的文件。因?yàn)楝F(xiàn)在大部分的業(yè)務(wù)邏輯代碼都轉(zhuǎn)移到了service類,控制器和插件里,我們稍后會(huì)看到這一點(diǎn)。

什么是路由?調(diào)用hook_menu()會(huì)發(fā)生什么?它的回調(diào)怎么工作?

在drupal 7里,hook_menu()可能是最能實(shí)現(xiàn)這些功能需求的鉤子,因?yàn)樗褪潜挥糜谠O(shè)定路徑并且把這些路徑和回調(diào)函數(shù)連接起來,它也用來創(chuàng)建菜單鏈接和其他一些東西

在Drupal 8里,我們不再需要hook_menu()了,因?yàn)槲覀儠?huì)大量使用Symfony2的組件來處理路由,這涉及定義一個(gè)路由配置和在控制器里處理一個(gè)回調(diào)(Controller類的方法), 讓我們來實(shí)際看下它是如何工作的,我們來創(chuàng)建一個(gè)簡(jiǎn)單的頁面來輸出那句程序界的永恒經(jīng)典:Hello world!

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

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

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

第二行path, 我們指定了這個(gè)路由的注冊(cè)路徑。

第三行defaults默認(rèn)設(shè)置,我們?cè)O(shè)定了兩件事:默認(rèn)的頁面標(biāo)題(_title)和引用一個(gè)DemoController類的一個(gè)方法(_content)

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

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

現(xiàn)在,讓我們來創(chuàng)建第一個(gè)叫做DemoController的控制器,并且它包含了一個(gè)方法叫做:demo(),用于當(dāng)用戶訪問該頁面時(shí)調(diào)用此方法。

在模塊目錄里,創(chuàng)建一個(gè)src的文件夾和一個(gè)Controller的文件夾,這就是我們存放controller類的地方,好了,進(jìn)入Controller文件夾,創(chuàng)建文件:DemoController.php。

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

在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. ?> 

這是我們?yōu)榱嗽谝粋€(gè)頁面上顯示"Hello World!"的一個(gè)結(jié)構(gòu)最簡(jiǎn)單的實(shí)例,在頂部,我們指定了類的命名空間,在下面,我們聲明了我們的類

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

怎么創(chuàng)建菜單鏈接?

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

讓我們來看看,該怎樣創(chuàng)建一個(gè)菜單鏈接來顯示在Structure(結(jié)構(gòu))管理菜單下,首先,我們?cè)谖覀兊哪K根目錄下創(chuàng)建一個(gè)demo.menu_links.yml 文件,在這個(gè)文件中,我們將設(shè)定菜單鏈接和在現(xiàn)有網(wǎng)站菜單上的位置,為了實(shí)現(xiàn)我們所要做的,我們需要在文件里輸入以下代碼:

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

這又是一個(gè)基于縮進(jìn)的yml結(jié)構(gòu)文件,第一行我們定義了模塊的菜單鏈接的機(jī)器名(就像之前定義路由一樣),接下來,我們?cè)O(shè)定了鏈接的標(biāo)題,描述,父菜單路徑(作為子菜單放在該父菜單下),以及該菜單關(guān)聯(lián)的路由名。

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

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

結(jié)論:在這篇文章中,我們開始討論Drupal 8 的模塊開發(fā),在這個(gè)階段(alpha12發(fā)布),正是開始學(xué)習(xí)怎樣使用新的API接口來開發(fā)貢獻(xiàn)模塊,為此,我會(huì)大家一起退出傳統(tǒng)框架的思維,用全新的思維一起探索學(xué)習(xí)Drupal 8的變化。

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

在接下來的教程中,我們將繼續(xù)構(gòu)建完善這個(gè)模塊,并期待發(fā)現(xiàn)在Drupal8中其他一些很酷的東西,我們將看到我們?nèi)绾蝿?chuàng)建區(qū)塊和如何配合使用表單和配置管理系統(tǒng),下期見。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
免费看ww视频网站入口| 福利在线国产| 国产午夜视频在线观看| 国产亚洲精品自在线观看| 久热国产在线| 国产精品偷乱一区二区三区| 国产中文伊人| 最新天堂资源在线| 精品一区二区三区在线观看l| 在线成人一区| 国产裸舞福利在线视频合集| 中文在线观看视频| 久草.com| 国产美女av在线| 国产精品视频白浆合集| av免费在线观看网站| 影音先锋在线中文字幕| 成年黄网站在线观看免费| 国产日产精品久久久久久婷婷| 国产黄色在线观看| 青青久草在线| 97影院秋霞午夜在线观看| 九九热在线视频| 亚洲夜夜综合| 国产极品嫩模在线视频一区| 青青草视频在线观看| 国产网红在线| 狠狠操天天操夜夜操| 国产福利小视频在线观看| 久久99国产视频| gogogo影视剧免费观看在线观看| 国产香蕉免费精品视频| 国产美女在线一区二区三区| 国产精品冒白浆免费视频| 激情丁香久久| 青青草原国产在线观看| 亚洲天堂影院在线观看| 国产不卡在线| 国产精品久久久久久久久鸭| 人成在线免费视频| 亚洲精品视频在线免费| 亚洲最新永久在线观看| 在线成人综合色一区| 国产在线看片| 欧美高清xxxx性| jlzzjlzz欧美大全| 午夜影院免费看| 四虎精品成人a在线观看| 99在线免费视频| 亚洲欧美日韩成人网| 亚洲视频精品在线观看| 日本h片在线观看| 任你操在线观看| 黄色毛片在线看| 国产女人伦码一区二区三区不卡| 久久精品视频观看| 资源视频在线播放免费| 国产野外战在线播放| 国产精品你懂的在线观看| 国产视频在线播放| 国产a级网站| 日本成人免费网站| 国产精选在线视频拍拍拍| 国产成人午夜精品| 欧美色第一页| 国产精品国精产品一二| 天天插天天狠天天透| 好吊日视频在线观看| 国产高清在线| 欧洲有码在线视频| 国产嫩草在线视频| 99热免费观看| 国产一区二区三区美女秒播| 97在线超碰| 黄色免费av| 精品电影在线| 国产一区二区三区不卡在线| 午夜在线视频播放| 国产一级免费| sese一区| 精品一区二区三区在线成人| 九九热视频在线观看| 在线视频观看国产| 国产午夜在线视频| 日本中文字幕高清视频| 香蕉视频在线看| 国产极品视频| 国产精品偷乱一区二区三区| 超碰91在线| 在线国产福利网站| 96久久久久久| 国产激情在线视频| 国产无遮挡又黄又爽免费网站| 青青青手机在线视频观看| 国产成人亚洲精品播放器下载| 国产精选一区二区三区不卡催乳| 免费在线观看a| 亚洲精品久久久成人| 国产黄视频网站| 国产精品视频h| 国产精品天堂| 最近中文字幕mv免费高清电影| 久久精品无码一区二区日韩av| 亚洲an天堂an在线观看| 在线中文字幕视频| 在线免费看av| av在线电影观看| а√天堂www在线а√天堂视频| 伊人影院在线观看| 亚洲人在线播放| 女子免费在线观看视频www| 欧美亚洲系列| 国产女王在线**视频 | 在线观看视频污| 国产爆初菊在线观看免费视频网站| 久久精品蜜桃| 国产欧美日本亚洲精品一4区| 国产香蕉视频在线看| 国产福利视频在线观看| 99热99re6国产在线播放| 欧美一级久久久久久久久大| 日本电影在线观看| 1区2区3区在线| 亚洲精品一区中文字幕电影| 九九在线免费视频| 国产精品爱久久久久久久小说| 91欧美在线视频| 日本天堂影院在线视频| 最新超碰在线| 国产激情视频在线观看| 亚洲成av人影片在线观看| 最近中文av字幕在线中文| 91涩漫在线观看c| 丁香婷婷在线观看| 在线中文字幕第一页| 国产麻豆麻豆| 日本视频一二三区中文字幕| 国产福利免费在线观看| 久久99精品久久久久久野外| 国产啊啊啊视频在线观看| 精品中文字幕不卡在线视频| 国产福利在线| 自拍av在线| 国产在线高潮| 一级二级三级在线观看| 国产精品自拍亚洲| eeuss在线观看| 国产高清大尺度一区二区不卡| 麻豆精品传媒视频观看| 精品福利视频导航大全| 国产经典自拍视频在线观看| 尤物网址在线观看| 成在线人视频免费视频| 男人操女人免费网站| 亚洲网站一区| 四虎久久影院| 三级小说一区| av人人综合网| 在线看黄网址| 中文产幕区在线观看| 国产超碰在线| 在线免费看黄网站| av亚洲在线| 欧美a免费在线| 俺来俺也去www色在线观看| 在线免费黄色毛片| 伊人影院在线视频| 日韩黄色成人| 久久久久国产精品嫩草影院| 国产69精品久久app免费版 | 精品视频三区| 2020亚洲男人天堂| 国产极品视频| av免费在线观看网站| 一本久中文高清| 青青草视频在线观看| 成在线人视频免费视频| 91福利在线免费| 国产成人精品自线拍| 亚洲成人av高清| 开心婷婷激情| 国产黄色av免费看| 轻轻色免费在线视频| 中文字幕日本在线| 国产成在线观看免费视频| 精品伦理一区二区| 免费一区二区在线观看| 最新国产在线精品91尤物| 国产超碰在线| 免费看ww视频网站入口| 国产小视频在线| 永久免费网站在线| 国产一区二区三区不卡免费观看 | 国产www视频在线观看| 日本欧洲一区| 国产www网站| 久久综合精品视频| 国产高潮又爽又无遮挡又免费| jizz一区二区三区| 国产成人亚洲欧美电影|