0

0

教你利用组件开发与composer构建类Laravel框架

藏色散人

藏色散人

发布时间:2020-06-19 13:40:29

|

2930人浏览过

|

来源于csdn

转载

下面由laravel教程栏目给大家介绍利用组件开发与composer构建类laravel框架,希望对需要的朋友有所帮助!

教你利用组件开发与composer构建类Laravel框架

(注意这篇文章不适合零基础同学,需要一定得PHP基础)
如今“敏捷开发”“不要重复造轮子”思想已经在软件开发方面盛行了。项目中以框架作为基础进行二次开发已经成为了首选方案。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:laravellara(虚拟目录),创建一个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 AppUser()”实例化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 IlluminateContainerContainer;
    //setInstance将服务容器的实例添加为静态属性,这样就可以在任何位置获得服务器的实例。
    IlluminateContainerContainer::setInstance($app);
    //注册时间和路由
    with(new IlluminateEventsEventServiceProvider($app))->register();
    with(new IlluminateRoutingRoutingServiceProvider($app))->register();
    //加载路由
    require __DIR__.'/../app/Http/Routes.php';
    //实例化请求分发处理程序
    $request =IlluminateHttpRequest::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','AppHttpControllersWelcomeController@index');
 ?>

接下来再通过服务器访问到public的index,结果如下:
这里写图片描述

3、配置控制器模块
根据laravel目录结构,在appHttp目录下创建一个Controllers文件夹,然后创建一个WelcomeController.php文件,代码如下:

PaperFake
PaperFake

AI写论文

下载
<?php 
    namespace AppHttpControllers;

    class WelcomeController
    {
        public function index(){
            return "控制器";
        }
    }
 ?>

然后再配置路由文件为:

<?php 
    $app['router']->get('/',function(){
        return '<h1>路由成功!</h1>';
    });
    $app['router']->get('welcome','AppHttpControllersWelcomeController@index');
 ?>

接下来再访问localhost:8080/lara/public/index.php/welcome(这是我的路径,大家根据自己的服务器写)结果;
这里写图片描述

4、配置模型
首先创建一个数据库(我这里取名为lara),然后创建一个数据表students;
这里写图片描述
再来配置database组件,在入口文件下配置,配置后为:

<?php 
    use IlluminateDatabaseCapsuleManager;

    //调用自动加载文件函数
    require  __DIR__.'/../vendor/autoload.php';
    //实例化服务器容器,框架的一些功能生成都需要服务容器来实现,服务器容器来来服务注册和解析,比如可以实现下面两个服务的
    //注册。注册之后可以用$app['router']来调用服务。
    $app=new IlluminateContainerContainer;
    //setInstance将服务容器的实例添加为静态属性,这样就可以在任何位置获得服务器的实例。
    IlluminateContainerContainer::setInstance($app);
    //注册时间和路由
    with(new IlluminateEventsEventServiceProvider($app))->register();
    with(new IlluminateRoutingRoutingServiceProvider($app))->register();
    //加载路由
    //启动Eloquent ORM模块并进行相关配置
    $manager =new Manager();
    $manager->addConnection(require '../config/database.php');
    $manager->bootEloquent();

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

    //实例化请求分发处理程序
    $request =IlluminateHttpRequest::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 AppModels;
    use IlluminateDatabaseEloquentModel;
    class Student extends model
    {
        //禁用createTime/updateTime;
        public $timestamps =  false;       
    }
 ?>

我没有创建createTime和updateTime字段所以要设置$timestamps =  false;  
最后再使用Eloquent ORM利用模型,在WelcomeController.php文件中运用该模型:WelcomeController.php

<?php 
    namespace AppHttpControllers;
    use AppModelsStudent;
    use IlluminateContainerContainer;
    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 IlluminateDatabaseCapsuleManager;
    use IlluminateSupportFluent;
    //调用自动加载文件函数
    require  __DIR__.'/../vendor/autoload.php';
    //实例化服务器容器,框架的一些功能生成都需要服务容器来实现,服务器容器来来服务注册和解析,比如可以实现下面两个服务的
    //注册。注册之后可以用$app['router']来调用服务。
    $app=new IlluminateContainerContainer;
    //setInstance将服务容器的实例添加为静态属性,这样就可以在任何位置获得服务器的实例。
    IlluminateContainerContainer::setInstance($app);
    //注册时间和路由
    with(new IlluminateEventsEventServiceProvider($app))->register();
    with(new IlluminateRoutingRoutingServiceProvider($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 IlluminateViewViewServiceProvider($app))->register();
    with(new IlluminateFilesystemFilesystemServiceProvider($app))->register();
    require __DIR__.'/../app/Http/Routes.php';

    //实例化请求分发处理程序
    $request =IlluminateHttpRequest::createFromGlobals();
    $response =$app['router']->dispatch($request);
    //返回请求的响应
    $response->send();
 ?>

其中的路径根据自己电脑配置。
然后再分别创建larastorage ramework iews目录,和E:laravellara esources iews目录,分别存放编译文件和模板文件。在WelcomeController.php配置使用视图文件:

<?php 
    namespace AppHttpControllers;
    use AppModelsStudent;
    use IlluminateContainerContainer;
    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 esources iews目录下创建welcome.blade.php,注意后缀为.blade.php,否则无法识别。代码如下:

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

主要不要用php标签包围该代码
最后访问localhost:8080/lara/public/index.php/welcome
结果如下:
这里写图片描述
搞定。
这就构建了laravel的基本框架了。大家先试着构建一下,在接下来的文章中再慢慢解释其中的道理。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

340

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

293

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

773

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

385

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

141

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

85

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

80

2025.08.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

569

2026.03.04

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
第二十四期_PHP8编程
第二十四期_PHP8编程

共86课时 | 3.5万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.6万人学习

第二十三期_PHP编程
第二十三期_PHP编程

共93课时 | 7.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号