laravel 學習筆記——起點

 

本系列文章主要是方便初學 laravel 的人入門,幫一些朋友認識到如何入門、如何學習 laravel,同時補充一些忽略過的基礎知識。php

Laravel 給了我學習新知識的一個契機,讓我更早的接觸更多的東西。我如今這個博客就是用 laravel 編寫的。java

剛學習 laravel 實際上是一個痛苦的過程,不過痛苦事後,世界大不同。緣由就是形成痛苦的,不是 laravel 難,而是思想的陳舊帶來的。laravel 自己也沒有運用什麼超前的理念,但即便是炒的舊飯,也比餿了的來得美味一些。既然舊飯要炒一下,那就得費點小小的力氣。剩飯也香啊,尤爲是撒了蔥花以後sweat_smile sweat_smilesmirklaravel

學得越多,就應該記下來,這一系列筆記,也但願可以幫助你們。數據庫

因爲網絡上已經將 laravel 的安裝步驟說的足夠詳細,本人也是經過這些方式安裝的,沒有什麼特殊之處。關於安裝就不在本內容中討論,但我會在另外一篇文章內講述 composer 相關的內容的時候,聊一聊這一部分。編程

好了開始吧。設計模式

 

聲明

第一篇文章我不打算將重心直接帶到框架的使用上,而是讓讀者有一個清晰的概念。不少在 laravel 上的疑惑無非是安裝上的問題、功能函數或對象方法上的問題,最後就是糾結框架結構佈局和一些php基礎知識上的。爲了便於展開,我會着重在本文講述一些與 laravel 相關的基礎內容,這不但對於梳理整個框架體系有着很大的幫助,更多的是爲了理解一種思想,這種思想不但適用於 laravel,更適合平時項目的開發。因爲我我的也在不斷學習之中,本篇文章會不斷更新。本文除了文字講述,也儘可能帶來一些實例。在網絡上現有的資源存在的狀況下,本人會在文章內簡要提出並給出連接,以便各位按需得到想要的。網絡

正文

laravel是一個當下比較流行的框架,其主要特點我的認爲包括如下:composer

  • 簡潔而清晰地路由定義方式
  • 強大的IoC容器
  • 合理的框架結構
  • 豐富的第三方庫

入門很簡單

只要理清 laravel 上述的特點,基本上對laravel瞭解的差很少了,就算是入門了。這前三樣特點也剛好是 laravel 優雅的保證。其實 laravel 主要要學習的也就這麼多。因此,爲何會很難? laravel 真的很簡單,也許只是沒有找對方向,對嗎?確定是的。框架

我目前所瞭解的,包括髮生在我本身身上的,爲何以爲有時候 laravel 很難入門:思想、思路太過於陳舊。思想陳舊不算是貶義詞,就比如你不能夠說一個跟不上時代的人不如別人。但這種「舊」思想確實不適合 laravel 這種運用相對於舊思想而言的新框架。那麼哪些人容易在 laravel 上犯難?函數

  • 沒有認認真真(再次強調,是認認真真)看文檔的(佔比至少97%)
  • php 基礎不紮實的
  • 不熟悉面向對象編程的
  • 不熟悉面向接口編程的
  • 不知匿名函數爲什麼物的
  • 不熟悉反射的
  • 不喜歡命名空間的
  • 不喜歡研究設計模式的
  • 使用 php5.4 之前版本的或不喜歡運用新特性的
  • 沒用過 composer
  • 不熟悉 PSR 規範

上述內容不具有絕對錶明性。不過確實在 laravel 學習上犯難的,大都存在上述因素。不幸的是,最開始我基本所有知足上述條件,不幸的成爲了學習 laravel 最艱難的那批人。但幸運的是,我很喜歡php,爲了搞懂 laravel,照貓畫虎,模仿着去實現 laravel 的功能。就是在這樣一個過程裏,我慢慢了解了 laravel 其實並不像想象中的那般高大上,無非只是用了 php 最爲普通的一些東西。但成功必有其高明之處,laravel 將 php 的特性發揮到了極致,使得 laravel 的某一些境界變得比其餘框架更高。雖然其餘優秀的框架不在少數,但我認爲,laravel 這個框架雖然總體不可以算是最好,但至少在設計思想上已經將許多(特別註明,不是所有)框架狠狠地拉在了身後。

要學好 laravel,至少要學會作一件事:看文檔。大多數人以爲入門難或不知如何入門,請老老實實看文檔吧。

不少人說,laravel 文檔真的很渣啊,但實際上,你只是要上手使用,用 laravel 開發一個博客級別的小型應用,這個做爲入門的文檔算是超級詳盡的了。並非站着說話不腰疼,由於我也吐槽過。但在某一天百般無聊之下通讀了整個文檔,發現以前我所遇到的問題其實都寫在過文檔上。

吐槽laravel文檔的重心不該該是不詳盡,而應該是,太凌亂

laravel 的文檔凌亂纔是大問題,雖然看得出 laravel 文檔的結構安排的初衷是爲了減小冗餘的文字,但這點卻讓像我這種被慣壞了的用戶犯了大難。每每看似應該在這一部分出現的內容卻在另外一篇文檔內,這種安排不算奇葩也算是坑爹了。不得不認可,這樣子的安排減小了沒必要要的文字,但卻對初學者不友好。

這種狀況舉個例子:定義控制器是 Route::controller(),按照常理這應該和路由部分有個交集,但在控制器介紹部分隻字未提,極其容易和本來的路由定義搞混淆,由於他們都用了 Route 類。這只是一個典型。在數據庫一塊也經常出現相似問題,甚至更爲嚴重。

可是,即便如此凌亂,也不該該成爲不去讀文檔的理由。學習任何一個框架,都應該仔細閱讀其文檔。其實到最後才發現,原來 laravel 文檔的安排對於熟悉的開發者而言,反而是很科學的,由於其歸類很是明確,省去了沒必要要的文字感染,讓你專一於這一個問題點上。因此,不要認爲文檔不詳細,其實文檔作的已經夠多了。要知道,文檔是爲了讓你可以上手使用,並非完徹底全讓你完全學透的,若是想要了解更多 laravel 的細節和功能,我認爲應該去讀一讀 Laravel 的 API 文檔和一部分的Symfony文檔。若是願意,閱讀不一樣組件的源代碼效果更好,有時候你會產生一種源代碼比文檔更清晰的錯覺 stuck_out_tongue_closed_eyes

PHP的基礎也很重要

不管用什麼框架,都不要忘了這都是在作 php 開發,所以 php 的基礎很是重要。框架是讓編碼更爲方便,提升效率的,並非爲了下降某些層面的難度。

不少人在基礎方面吃虧,卻將其歸咎於框架的錯,可能這些人和我最初同樣,沒意識到 laravel 是一個在 php5.4 基礎上開發的(新的 laravel 5.1 要求 php 5.5 以上),用到了不少特性。其中有一個重點就是命名空間trait。命名空間不少人不喜歡,認爲這是個很麻煩的事情,別忘了命名空間是從 php5.3 就有的了,最初這是爲了解決重名和項目之間類的衝突的。到了如今,命名空間的存在使得項目與組件的代碼更容易規劃從而變得規範化,尤爲是在自動加載的時候,這一部分參考 PSR-4 規範。命名空間的不熟悉會給學習 laravel 和一些新版本的框架帶來足夠多的麻煩。

想要了解 php 的命名空間不須要能夠尋找教程,php 官方文檔很是詳盡。

除了命名空間,還有 trait,這是 php 5.4 以來的特性,適用於水平擴展類方法和功能的,經過 trait 能夠更快的組裝一個方法,具體依舊參考 php 官方文檔,十分詳盡。

其實除了 trait 和命名空間,做爲創建在面向對象編程思想下的框架,尤爲應當在整個開發中貫徹這一思想。而 php 的面向對象和 java、C# 還有 C++ 中有些地方有着很多的差別。

習慣了 php 的弱類型,有些人甚至不知道 php 能夠實現類型約束:

class foo

{

   public function __construct(Closure $config)

  {

     //

  }

}

上述例子要求初始化時必須提供一個匿名函數做爲參數。

重載、魔術方法、後期靜態綁定等等面向對象的基礎內容,這都是學習 laravel 以前的必修課。當你遇到困難,不少時候會在這上面出的問題。

Composer 與 PSR 規範

不少人有些疑惑,如何在 laravel 內使用本身的類? 不少人疑惑,一些文件應當放在 laravel 的哪一個目錄下? 也有不少人疑惑,爲何會提示某一些類沒法加載?

問這些問題的主要有兩種人。一種是不瞭解 composer 的,一種是代碼裏存在問題的。後者佔主要部分,但我想來講說前者,由於一開始我是第一種。

雖然 Composer 不該當是學習 php 和 laravel 的必須的,但既然被 laravel 所使用且 composer 被接受和普及已是大勢所趨,那就應當對其至少有些許瞭解。composer 被創造的初衷是用來管理 php 依賴的。利用 composer 能夠很快的引入第三方庫,且這些庫能夠被直接使用。

不僅僅是 Laravel,實際上做爲一個基於 Symfony 框架組件開發的框架,Symfony 這個框架更能感覺到 Composer 利用的廣泛,同時還有 Yii Framework 等主流的優秀框架,這些無一不使用了 composer 做爲組件的包管理器。

Composer 自帶的自動加載(autoload)機制是基於 PSR 規範的。所以很是有必要了解 PSR 規範,對於自動加載,僅需瞭解 PSR-4 便可,PSR-0 基本被淘汰。

因爲利用好 composer 的自動加載,使得不管你的類庫和函數放在哪都可以被加載。所以,如何在 laravel 中使用本身的類呢?很簡單,基本上我所瞭解的就如下兩種。

  • 若是你的類庫是發佈到某個版本控制系統上,能夠經過 packagist.org 發佈本身的包,而後經過 composer 的 require 引入便可。
  • 若是你沒有使用 vcs 且僅僅只是在當前項目中建立的類的話,只需利用好 composer 的 autoload 便可。

Composer 實現庫和依賴的導入有不少種,Composer 的中文文檔也很是詳盡,再也不浪費篇幅。但這一切都須要熟悉 PSR-4 規範(該規範很簡單,不要有芥蒂),其次就是必定要熟悉命名空間(namespace)。

同理,一些人疑惑,一些文件該放在 laravel 下的哪個目錄?或者說,我這個文件能夠放這裏嗎?

這麼說吧,理論上,放在哪均可以,只要是能夠經過 composer 和 laravel 自帶的自動加載機制載入便可,且文件是在配置內所設定的命名空間內。若是加載時出現問題,能夠經過 composer 命令dump-autoload 來解決,若是還有問題,須要檢查是否命名空間和配置出現問題。

相關文章
相關標籤/搜索