這篇文章將為大家詳細(xì)講解有關(guān)如何利用組件開發(fā)與composer構(gòu)建類Laravel框架,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

如今“敏捷開發(fā)”“不要重復(fù)造輪子”思想已經(jīng)在軟件開發(fā)方面盛行了。項(xiàng)目中以框架作為基礎(chǔ)進(jìn)行二次開發(fā)已經(jīng)成為了選方案。Laravel是一款優(yōu)秀的PHP框架,在眾多框架之中保持著一種領(lǐng)跑的姿態(tài)。Laravel比較突出的優(yōu)點(diǎn)是組件式開發(fā)、Ioc容器、分布式運(yùn)用架構(gòu)設(shè)計(jì)。而說(shuō)到PHP組件開發(fā)就不得不提到composer,composer是專門為PHP而生的,是PHP組件的管理工具。Laravel框架就是采用組件式開發(fā)的典范,稍后我將演示如何利用composer組件管理工具手動(dòng)構(gòu)建laravel主要功能,包括路由功能、控制器功能、模型、視圖。
那么什么是組件式開發(fā)?
按照我的理解是:對(duì)于一個(gè)大型項(xiàng)目來(lái)說(shuō),如果把各個(gè)功能在項(xiàng)目初期分為各個(gè)不同的版塊,最后在合成就是組件式開發(fā)。特別是在今天開源的社會(huì),很多人已經(jīng)把某個(gè)版塊(組件)做的很好了,那么我們就可以直接嵌入到項(xiàng)目中去(比如一些優(yōu)秀的類庫(kù))。甚至有時(shí)候我們可以快速更換項(xiàng)目中的模塊而不修改系統(tǒng)中的其他部分代碼。為了達(dá)到這個(gè)目的我們需要遵循一定得規(guī)范與接口。在PHP中有個(gè)著名的PHP-FIG(PHP Framework Interop Group,PHP 框架互動(dòng)群),它的作用就是制定一系列PHP開發(fā)規(guī)范即PSR編碼規(guī)范。PHPer在開發(fā)框架的時(shí)候共同遵守這個(gè)規(guī)則的話,各種組件就可以很友好地組合在一起。PSR主要包括PSR0-PSR4文檔,其中PSR0與PSR4就制定了Autoloader標(biāo)準(zhǔn)。
接下來(lái)手動(dòng)構(gòu)建Laravel框架中的路由功能、控制器功能、模型、視圖。
環(huán)境要求:
1、Composer(網(wǎng)上自行搜索安裝)
2、PHP5.3以上
3、Mysql數(shù)據(jù)庫(kù)
4、Apache或者Nginx服務(wù)器
步驟:
1、項(xiàng)目初始化
2、添加路由功能
3、添加控制器模塊
4、添加模型
5、添加視圖
1、項(xiàng)目初始化
在服務(wù)器根目錄創(chuàng)建一個(gè)文件夾,起名為lara,比如我的E:\laravel\lara(虛擬目錄),創(chuàng)建一個(gè)composer.json文件并輸入以下內(nèi)容(為了不重復(fù)用composer update,我將待會(huì)要用的組件一次性加載)
{
"require":{
"illuminate/routing":"*",
"illuminate/events":"*",
"illuminate/database":"*",
"illuminate/view":"*"
},
"autoload":{
"psr-4":{
"App\\":"app/"
} }}composer就是根據(jù)composer.json中的內(nèi)容來(lái)加載組件的。其中有路由組件、事件組件、數(shù)據(jù)庫(kù)組件、視圖組件(其中控制器組件已經(jīng)包括在路由組件)。autoload的配置為psr-4規(guī)范,也就是說(shuō)當(dāng)我們使用“$user =new \App\User()”實(shí)例化User對(duì)象時(shí),autoload會(huì)在app目錄下查找User.php文件。有了composer.json之后就可以加載組件了,在window下是用cmd定位到lara目錄然后使用composer update命令,在linux類似。在加載之后有如下目錄:
2、配置路由文件
我們都知道laravel有入口文件和路由文件。我就仿照l(shuí)aravel在lara目錄下新建一個(gè)public文件夾,在public目錄下創(chuàng)建一個(gè)入口文件index.php配置如下:
<?php //調(diào)用自動(dòng)加載文件函數(shù) require __DIR__.'/../vendor/autoload.php'; //實(shí)例化服務(wù)器容器,框架的一些功能生成都需要服務(wù)容器來(lái)實(shí)現(xiàn),服務(wù)器容器來(lái)來(lái)服務(wù)注冊(cè)和解析,比如可以實(shí)現(xiàn)下面兩個(gè)服務(wù)的 //注冊(cè)。注冊(cè)之后可以用$app['router']來(lái)調(diào)用服務(wù)。 $app=new Illuminate\Container\Container; //setInstance將服務(wù)容器的實(shí)例添加為靜態(tài)屬性,這樣就可以在任何位置獲得服務(wù)器的實(shí)例。 Illuminate\Container\Container::setInstance($app); //注冊(cè)時(shí)間和路由 with(new Illuminate\Events\EventServiceProvider($app))->register(); with(new Illuminate\Routing\RoutingServiceProvider($app))->register(); //加載路由 require __DIR__.'/../app/Http/Routes.php'; //實(shí)例化請(qǐng)求分發(fā)處理程序 $request =Illuminate\Http\Request::createFromGlobals(); $response =$app['router']->dispatch($request); //返回請(qǐng)求的響應(yīng) $response->send(); ?>
接下來(lái)設(shè)置路由文件。在lara目錄下創(chuàng)建app文件夾,在該目錄再創(chuàng)建一個(gè)Http文件夾,在Http目錄下創(chuàng)建一個(gè)routes.php文件。內(nèi)容如下(學(xué)過(guò)laravel框架的人應(yīng)該很清楚)
<?php
$app['router']->get('/',function(){
return '<h2>路由成功!</h2>';
});
$app['router']->get('welcome','App\Http\Controllers\WelcomeController@index');
?>接下來(lái)再通過(guò)服務(wù)器訪問(wèn)到public的index,結(jié)果如下:
3、配置控制器模塊
根據(jù)laravel目錄結(jié)構(gòu),在app\Http目錄下創(chuàng)建一個(gè)Controllers文件夾,然后創(chuàng)建一個(gè)WelcomeController.php文件,代碼如下:
<?php
namespace App\Http\Controllers;
class WelcomeController
{
public function index(){
return "控制器";
}
}
?>然后再配置路由文件為:
<?php
$app['router']->get('/',function(){
return '<h2>路由成功!</h2>';
});
$app['router']->get('welcome','App\Http\Controllers\WelcomeController@index');
?>接下來(lái)再訪問(wèn)localhost:8080/lara/public/index.php/welcome(這是我的路徑,大家根據(jù)自己的服務(wù)器寫)結(jié)果;
4、配置模型
首先創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)(我這里取名為lara),然后創(chuàng)建一個(gè)數(shù)據(jù)表students;
再來(lái)配置database組件,在入口文件下配置,配置后為:
<?php use Illuminate\Database\Capsule\Manager; //調(diào)用自動(dòng)加載文件函數(shù) require __DIR__.'/../vendor/autoload.php'; //實(shí)例化服務(wù)器容器,框架的一些功能生成都需要服務(wù)容器來(lái)實(shí)現(xiàn),服務(wù)器容器來(lái)來(lái)服務(wù)注冊(cè)和解析,比如可以實(shí)現(xiàn)下面兩個(gè)服務(wù)的 //注冊(cè)。注冊(cè)之后可以用$app['router']來(lái)調(diào)用服務(wù)。 $app=new Illuminate\Container\Container; //setInstance將服務(wù)容器的實(shí)例添加為靜態(tài)屬性,這樣就可以在任何位置獲得服務(wù)器的實(shí)例。 Illuminate\Container\Container::setInstance($app); //注冊(cè)時(shí)間和路由 with(new Illuminate\Events\EventServiceProvider($app))->register(); with(new Illuminate\Routing\RoutingServiceProvider($app))->register(); //加載路由 //啟動(dòng)Eloquent ORM模塊并進(jìn)行相關(guān)配置 $manager =new Manager(); $manager->addConnection(require '../config/database.php'); $manager->bootEloquent(); require __DIR__.'/../app/Http/Routes.php'; //實(shí)例化請(qǐng)求分發(fā)處理程序 $request =Illuminate\Http\Request::createFromGlobals(); $response =$app['router']->dispatch($request); //返回請(qǐng)求的響應(yīng) $response->send(); ?>
然后配置數(shù)據(jù)庫(kù)連接,在lara目錄下創(chuàng)建config文件夾,然后創(chuàng)建database.php
<?php return [ 'driver' =>'mysql', 'host' =>'localhost', 'database' =>'lara', 'username' =>'root', 'password' =>'123', 'charset' =>'utf8', 'collation' =>'utf8_general_ci', 'prefix' =>'' ]; ?>
大家根據(jù)自己的數(shù)據(jù)庫(kù)配置相關(guān)參數(shù)。
接下來(lái)就創(chuàng)建模板文件了,在app目錄下創(chuàng)建Models文件夾,再該目錄創(chuàng)建Student.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Student extends model
{
//禁用createTime/updateTime;
public $timestamps = false;
}
?>我沒(méi)有創(chuàng)建createTime和updateTime字段所以要設(shè)置$timestamps = false;
最后再使用Eloquent ORM利用模型,在WelcomeController.php文件中運(yùn)用該模型: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'];
}
}
?>再訪問(wèn)localhost:8080/lara/public/index.php/welcome
結(jié)果如下:
5、添加視圖組件
配置入口文件如下:
<?php
use Illuminate\Database\Capsule\Manager;
use Illuminate\Support\Fluent;
//調(diào)用自動(dòng)加載文件函數(shù)
require __DIR__.'/../vendor/autoload.php';
//實(shí)例化服務(wù)器容器,框架的一些功能生成都需要服務(wù)容器來(lái)實(shí)現(xiàn),服務(wù)器容器來(lái)來(lái)服務(wù)注冊(cè)和解析,比如可以實(shí)現(xiàn)下面兩個(gè)服務(wù)的
//注冊(cè)。注冊(cè)之后可以用$app['router']來(lái)調(diào)用服務(wù)。
$app=new Illuminate\Container\Container;
//setInstance將服務(wù)容器的實(shí)例添加為靜態(tài)屬性,這樣就可以在任何位置獲得服務(wù)器的實(shí)例。
Illuminate\Container\Container::setInstance($app);
//注冊(cè)時(shí)間和路由
with(new Illuminate\Events\EventServiceProvider($app))->register();
with(new Illuminate\Routing\RoutingServiceProvider($app))->register();
//加載路由
//啟動(dòng)Eloquent ORM模塊并進(jìn)行相關(guān)配置
$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';
//實(shí)例化請(qǐng)求分發(fā)處理程序
$request =Illuminate\Http\Request::createFromGlobals();
$response =$app['router']->dispatch($request);
//返回請(qǐng)求的響應(yīng)
$response->send();
?>其中的路徑根據(jù)自己電腦配置。
然后再分別創(chuàng)建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);
}
}
?>讀取一行數(shù)據(jù)給視圖文件welcome
然后在lara\resources\views目錄下創(chuàng)建welcome.blade.php,注意后綴為.blade.php,否則無(wú)法識(shí)別。代碼如下:
{{ $data['name']}}{{ $data['age']}}主要不要用php標(biāo)簽包圍該代碼
最后訪問(wèn)localhost:8080/lara/public/index.php/welcome
結(jié)果如下:
關(guān)于“如何利用組件開發(fā)與composer構(gòu)建類Laravel框架”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
當(dāng)前文章:如何利用組件開發(fā)與composer構(gòu)建類Laravel框架-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://chinadenli.net/article2/edsic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、定制網(wǎng)站、網(wǎng)站制作、定制開發(fā)、品牌網(wǎng)站制作、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容
移動(dòng)網(wǎng)站建設(shè)知識(shí)