1. 程式人生 > 實用技巧 >教你利用元件開發與composer構建類Laravel6.0框架

教你利用元件開發與composer構建類Laravel6.0框架

如今“敏捷開發”“不要重複造輪子”思想已經在軟體開發方面盛行了。專案中以框架作為基礎進行二次開發已經成為了首選方案。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');
 ?>

接下來再訪問localhost:8080/lara/public/index.php/welcome(這是我的路徑,大家根據自己的伺服器寫)結果;

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']}}

主要不要用php標籤包圍該程式碼
最後訪問localhost:8080/lara/public/index.php/welcome
結果如下:

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

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

更多PHP內容請訪問:

學習資料、文件、面試題、視訊 點選連結免費獲取​shimo.im

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

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

部分內容截圖:

掃描下面二維碼領取資料: