教你利用組件開發與composer構建類Laravel框架

如今“敏捷開發”“不要重複造輪子”思想已經在軟件開發方面盛行了。項目中以框架作爲基礎進行二次開發已經成爲了首選方案。Laravel是一款優秀的PHP框架,在衆多框架之中保持着一種領跑的姿態。Laravel比較突出的優點是組件式開發、Ioc容器、分佈式運用架構設計。而說到PHP組件開發就不得不提到composer,composer是專門爲PHP而生的,是PHP組件的管理工具。Laravel框架就是採用組件式開發的典範,稍後我將演示如何利用composer組件管理工具手動構建laravel主要功能,包括路由功能、控制器功能、模型、視圖。

那麼什麼是組件式開發?
按照我的理解是:對於一個大型項目來說,如果把各個功能在項目初期分爲各個不同的版塊,最後在合成就是組件式開發。特別是在今天開源的社會,很多人已經把某個版塊(組件)做的很好了,那麼我們就可以直接嵌入到項目中去(比如一些優秀的類庫)。甚至有時候我們可以快速更換項目中的模塊而不修改系統中的其他部分代碼。爲了達到這個目的我們需要遵循一定得規範與接口。在PHP中有個著名的PHP-FIG(PHP Framework Interop Group,PHP 框架互動羣),它的作用就是制定一系列PHP開發規範即PSR編碼規範。PHPer在開發框架的時候共同遵守這個規則的話,各種組件就可以很友好地組合在一起。PSR主要包括PSR0-PSR4文檔,其中PSR0與PSR4就制定了Autoloader標準。

接下來手動構建Laravel框架中的路由功能、控制器功能、模型、視圖。

環境要求:
1、Composer(網上自行搜索安裝)
2、PHP5.3以上
3、Mysql數據庫
4、Apache或者Nginx服務器

步驟:
1、項目初始化
2、添加路由功能
3、添加控制器模塊
4、添加模型
5、添加視圖

1、項目初始化
在服務器根目錄創建一個文件夾,起名爲lara,比如我的E:\laravel\lara(虛擬目錄),創建一個composer.json文件並輸入以下內容(爲了不重複用composer update,我將待會要用的組件一次性加載)

{

    "require":{

        "illuminate/routing":"*",

        "illuminate/events":"*",

        "illuminate/database":"*",

        "illuminate/view":"*"

    },

    "autoload":{

        "psr-4":{

            "App\\":"app/"

        }    }}

composer就是根據composer.json中的內容來加載組件的。其中有路由組件、事件組件、數據庫組件、視圖組件(其中控制器組件已經包括在路由組件)。autoload的配置爲psr-4規範,也就是說當我們使用“$user =new \App\User()”實例化User對象時,autoload會在app目錄下查找User.php文件。有了composer.json之後就可以加載組件了,在window下是用cmd定位到lara目錄然後使用composer update命令,在linux類似。在加載之後有如下目錄:

2、配置路由文件

我們都知道laravel有入口文件和路由文件。我就仿照laravel在lara目錄下新建一個public文件夾,在public目錄下創建一個入口文件index.php配置如下:

<?php 

    //調用自動加載文件函數

    require  __DIR__.'/../vendor/autoload.php';

    //實例化服務器容器,框架的一些功能生成都需要服務容器來實現,服務器容器來來服務註冊和解析,比如可以實現下面兩個服務的

    //註冊。註冊之後可以用$app['router']來調用服務。

    $app=new Illuminate\Container\Container;

    //setInstance將服務容器的實例添加爲靜態屬性,這樣就可以在任何位置獲得服務器的實例。

    Illuminate\Container\Container::setInstance($app);

    //註冊時間和路由

    with(new Illuminate\Events\EventServiceProvider($app))->register();

    with(new Illuminate\Routing\RoutingServiceProvider($app))->register();

    //加載路由

    require __DIR__.'/../app/Http/Routes.php';

    //實例化請求分發處理程序

    $request =Illuminate\Http\Request::createFromGlobals();

    $response =$app['router']->dispatch($request);

    //返回請求的響應

    $response->send();

 ?>

接下來設置路由文件。在lara目錄下創建app文件夾,在該目錄再創建一個Http文件夾,在Http目錄下創建一個routes.php文件。內容如下(學過laravel框架的人應該很清楚)

<?php 

    $app['router']->get('/',function(){

        return '<h1>路由成功!</h1>';

    });

    $app['router']->get('welcome','App\Http\Controllers\WelcomeController@index');

 ?>

接下來再通過服務器訪問到public的index,結果如下:

3、配置控制器模塊
根據laravel目錄結構,在app\Http目錄下創建一個Controllers文件夾,然後創建一個WelcomeController.php文件,代碼如下:

<?php 

    namespace App\Http\Controllers;

 

    class WelcomeController

    {

        public function index(){

            return "控制器";

        }

    }

 ?>

然後再配置路由文件爲:

<?php 

    $app['router']->get('/',function(){

        return '<h1>路由成功!</h1>';

    });

    $app['router']->get('welcome','App\Http\Controllers\WelcomeController@index');

 ?>

4、配置模型

首先創建一個數據庫(我這裏取名爲lara),然後創建一個數據表students;

再來配置database組件,在入口文件下配置,配置後爲:

<?php 
 use Illuminate\Database\Capsule\Manager;
 
 //調用自動加載文件函數
 require __DIR__.'/../vendor/autoload.php';
 //實例化服務器容器,框架的一些功能生成都需要服務容器來實現,服務器容器來來服務註冊和解析,比如可以實現下面兩個服務的
 //註冊。註冊之後可以用$app['router']來調用服務。
 $app=new Illuminate\Container\Container;
 //setInstance將服務容器的實例添加爲靜態屬性,這樣就可以在任何位置獲得服務器的實例。
 Illuminate\Container\Container::setInstance($app);
 //註冊時間和路由
 with(new Illuminate\Events\EventServiceProvider($app))->register();
 with(new Illuminate\Routing\RoutingServiceProvider($app))->register();
 //加載路由
 //啓動Eloquent ORM模塊並進行相關配置
 $manager =new Manager();
 $manager->addConnection(require '../config/database.php');
 $manager->bootEloquent();
 
 require __DIR__.'/../app/Http/Routes.php';
 
 //實例化請求分發處理程序
 $request =Illuminate\Http\Request::createFromGlobals();
 $response =$app['router']->dispatch($request);
 //返回請求的響應
 $response->send();
 ?>

然後配置數據庫連接,在lara目錄下創建config文件夾,然後創建database.php

<?php 

    return [

        'driver'    =>'mysql',

        'host'      =>'localhost',

        'database'  =>'lara',

        'username'  =>'root',

        'password'  =>'123',

        'charset'   =>'utf8',

        'collation' =>'utf8_general_ci',

        'prefix'    =>''

    ];

 ?>

大家根據自己的數據庫配置相關參數。 接下來就創建模板文件了,在app目錄下創建Models文件夾,再該目錄創建Student.php

<?php

    namespace App\Models;

    use Illuminate\Database\Eloquent\Model;

    class Student extends model

    {

        //禁用createTime/updateTime;

        public $timestamps =  false;      

    }

 ?>

我沒有創建createTime和updateTime字段所以要設置$timestamps = false;
最後再使用Eloquent ORM利用模型,在WelcomeController.php文件中運用該模型:WelcomeController.php

<?php

    namespace App\Http\Controllers;

    use App\Models\Student;

    use Illuminate\Container\Container;

    class WelcomeController

    {

        public function index(){

            $student =Student::first();

            $data =$student->getAttributes();

 

            return $data['name'].";".$data['age'];

        }

    }

 ?>

再訪問localhost:8080/lara/public/index.php/welcome
結果如下:

5、添加視圖組件
配置入口文件如下:

<?php 

    use Illuminate\Database\Capsule\Manager;

    use Illuminate\Support\Fluent;

    //調用自動加載文件函數

    require  __DIR__.'/../vendor/autoload.php';

    //實例化服務器容器,框架的一些功能生成都需要服務容器來實現,服務器容器來來服務註冊和解析,比如可以實現下面兩個服務的

    //註冊。註冊之後可以用$app['router']來調用服務。

    $app=new Illuminate\Container\Container;

    //setInstance將服務容器的實例添加爲靜態屬性,這樣就可以在任何位置獲得服務器的實例。

    Illuminate\Container\Container::setInstance($app);

    //註冊時間和路由

    with(new Illuminate\Events\EventServiceProvider($app))->register();

    with(new Illuminate\Routing\RoutingServiceProvider($app))->register();

    //加載路由

    //啓動Eloquent ORM模塊並進行相關配置

    $manager =new Manager();

    $manager->addConnection(require '../config/database.php');

    $manager->bootEloquent();

    $app->instance('config',new Fluent);

    $app['config']['view.compiled'] = "E:\\laravel\\lara\\storage\\framework\\views\\";

    $app['config']['view.paths'] = ["E:\\laravel\\lara\\resources\\views\\"];

    with(new Illuminate\View\ViewServiceProvider($app))->register();

    with(new Illuminate\Filesystem\FilesystemServiceProvider($app))->register();

    require __DIR__.'/../app/Http/Routes.php';

 

    //實例化請求分發處理程序

    $request =Illuminate\Http\Request::createFromGlobals();

    $response =$app['router']->dispatch($request);

    //返回請求的響應

    $response->send();

 ?>

其中的路徑根據自己電腦配置。
然後再分別創建lara\storage\framework\views\目錄,和E:\laravel\lara\resources\views目錄,分別存放編譯文件和模板文件。在WelcomeController.php配置使用視圖文件:

<?php 

    namespace App\Http\Controllers;

    use App\Models\Student;

    use Illuminate\Container\Container;

    class WelcomeController

    {

        public function index(){

            $student =Student::first();

            $data =$student->getAttributes();

            $app=Container::getInstance();

            $factory =$app->make('view');

            return $factory->make('welcome')->with('data',$data);

        }

    }

 ?>

讀取一行數據給視圖文件welcome
然後在lara\resources\views目錄下創建welcome.blade.php,注意後綴爲.blade.php,否則無法識別。代碼如下:

{{ $data['name']}}{{ $data['age']}}

搞定。 這就構建了laravel的基本框架了。大家先試着構建一下,在接下來的文章中再慢慢解釋其中的道理。

以上就是教你利用組件開發與composer構建類Laravel框架的詳細內容

更多PHP內容請訪問:

騰訊T3-T4標準精品PHP架構師教程目錄大全,只要你看完保證薪資上升一個臺階(持續更新)

我的官方羣點擊此處加入羣聊【PHP/web/高級學習交流羣】,一起學習,相互討論。

羣內已經有管理將知識體系整理好(源碼,學習視頻等資料),歡迎加羣免費領取

這套精品PHP教程絕不是市場上的那些妖豔賤貨可比,作爲web開發的佼佼者PHP並不遜色其他語言,加上Swoole後更加是如虎添翼!進軍通信 、物聯網行業開發百度地圖、百度訂單中心、虎牙、戰旗TV等!寒冬裁員期過後正是各大企業擴大招人的時期,現在市場初級程序員氾濫,進階中高級程序員絕對是各大企業急需的人才,這套學習教程適合那些1-5年以內的PHP開發者正處於瓶頸期,想要突破自己進階中高級、架構師!名額有限,先到先得!

部分資料截圖:

還有限時精品福利:

★騰訊高級PHP工程師筆試題目

★億級PV高併發場景訂單的處理

★laravel開發天貓商城組件服務

★戰旗TV視頻直播的架構項目實戰

掃描下面二維碼領取

對PHP後端技術,對PHP架構技術感興趣的朋友,我的官方羣點擊此處,一起學習,相互討論。

羣內已經有管理將知識體系整理好(源碼,學習視頻等資料),歡迎加羣免費領取。

本課程深度對標騰訊T3-T4標準,貼身打造學習計劃爲web開發人員進階中高級、架構師提升技術,爲自己增值漲薪!加入BAT特訓營還可以獲得內推大廠名額以及GO語言學習權限!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章