教你利用元件開發與composer構建類Laravel6.0框架
如今“敏捷開發”“不要重複造輪子”思想已經在軟體開發方面盛行了。專案中以框架作為基礎進行二次開發已經成為了首選方案。Laravel是一款優秀的PHP框架,在眾多框架之中保持著一種領跑的姿態。Laravel比較突出的優點是元件式開發、Ioc容器、分散式運用架構設計。而說到PHP元件開發就不得不提到composer,composer是專門為PHP而生的,是PHP元件的管理工具。Laravel框架就是採用元件式開發的典範,稍後我將演示如何利用composer元件管理工具手動構建laravel主要功能,包括路由功能、控制器功能、模型、檢視。
那麼什麼是元件式開發?
接下來手動構建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內容請訪問:
對PHP後端技術,對PHP架構技術感興趣的朋友,我的官方群點選此處,一起學習,相互討論。
群內已經有管理將知識體系整理好(原始碼,學習視訊等資料),歡迎加群免費領取。
部分內容截圖:
掃描下面二維碼領取資料: