목차
路由成功!
개발 도구 composer Laravel과 유사한 프레임워크를 구축하기 위한 컴포넌트 개발 및 작성기 사용 소개

Laravel과 유사한 프레임워크를 구축하기 위한 컴포넌트 개발 및 작성기 사용 소개

Feb 04, 2021 pm 02:50 PM
composer

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

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:\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类似。在加载之后有如下目录:
Laravel과 유사한 프레임워크를 구축하기 위한 컴포넌트 개발 및 작성기 사용 소개

2、配置路由文件
我们都知道laravel有入口文件和路由文件。我就仿照laravel在lara目录下新建一个public文件夹,在public目录下创建一个入口文件index.php配置如下:

<?php 
    //调用自动加载文件函数
    require  __DIR__.&#39;/../vendor/autoload.php&#39;;    //实例化服务器容器,框架的一些功能生成都需要服务容器来实现,服务器容器来来服务注册和解析,比如可以实现下面两个服务的
    //注册。注册之后可以用$app[&#39;router&#39;]来调用服务。
    $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__.&#39;/../app/Http/Routes.php&#39;;    //实例化请求分发处理程序
    $request =Illuminate\Http\Request::createFromGlobals();    
    $response =$app[&#39;router&#39;]->dispatch($request);    //返回请求的响应
    $response->send(); ?>
로그인 후 복사

接下来设置路由文件。在lara目录下创建app文件夹,在该目录再创建一个Http文件夹,在Http目录下创建一个routes.php文件。内容如下(学过laravel框架的人应该很清楚)

<?php 
    $app[&#39;router&#39;]->get(&#39;/&#39;,function(){
        return &#39;<h1 id="路由成功">路由成功!</h1>&#39;;
    });    $app[&#39;router&#39;]->get(&#39;welcome&#39;,&#39;App\Http\Controllers\WelcomeController@index&#39;); ?>
로그인 후 복사
로그인 후 복사

接下来再通过服务器访问到public的index,结果如下:
Laravel과 유사한 프레임워크를 구축하기 위한 컴포넌트 개발 및 작성기 사용 소개

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

<?php 
    namespace App\Http\Controllers;    class WelcomeController
    {
        public function index(){
            return "控制器";
        }
    } ?>
로그인 후 복사

然后再配置路由文件为:

<?php 
    $app[&#39;router&#39;]->get(&#39;/&#39;,function(){
        return &#39;<h1 id="路由成功">路由成功!</h1>&#39;;
    });    $app[&#39;router&#39;]->get(&#39;welcome&#39;,&#39;App\Http\Controllers\WelcomeController@index&#39;); ?>
로그인 후 복사
로그인 후 복사

接下来再访问localhost:8080/lara/public/index.php/welcome(这是我的路径,大家根据自己的服务器写)结果;
Laravel과 유사한 프레임워크를 구축하기 위한 컴포넌트 개발 및 작성기 사용 소개

4、配置模型
首先创建一个数据库(我这里取名为lara),然后创建一个数据表students;
Laravel과 유사한 프레임워크를 구축하기 위한 컴포넌트 개발 및 작성기 사용 소개
再来配置database组件,在入口文件下配置,配置后为:

<?php 
    use Illuminate\Database\Capsule\Manager;    //调用自动加载文件函数
    require  __DIR__.&#39;/../vendor/autoload.php&#39;;    //实例化服务器容器,框架的一些功能生成都需要服务容器来实现,服务器容器来来服务注册和解析,比如可以实现下面两个服务的
    //注册。注册之后可以用$app[&#39;router&#39;]来调用服务。
    $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 &#39;../config/database.php&#39;);    $manager->bootEloquent();    require __DIR__.&#39;/../app/Http/Routes.php&#39;;    //实例化请求分发处理程序
    $request =Illuminate\Http\Request::createFromGlobals();    $response =$app[&#39;router&#39;]->dispatch($request);    //返回请求的响应
    $response->send(); ?>
로그인 후 복사

然后配置数据库连接,在lara目录下创建config文件夹,然后创建database.php

<?php 
    return [        &#39;driver&#39;    =>&#39;mysql&#39;,        &#39;host&#39;      =>&#39;localhost&#39;,        &#39;database&#39;  =>&#39;lara&#39;,        &#39;username&#39;  =>&#39;root&#39;,        &#39;password&#39;  =>&#39;123&#39;,        &#39;charset&#39;   =>&#39;utf8&#39;,        &#39;collation&#39; =>&#39;utf8_general_ci&#39;,        &#39;prefix&#39;    =>&#39;&#39;
    ]; ?>
로그인 후 복사

大家根据自己的数据库配置相关参数。
接下来就创建模板文件了,在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[&#39;name&#39;].";".$data[&#39;age&#39;];
        }
    } ?>
로그인 후 복사

再访问localhost:8080/lara/public/index.php/welcome
结果如下:
Laravel과 유사한 프레임워크를 구축하기 위한 컴포넌트 개발 및 작성기 사용 소개
5、添加视图组件
配置入口文件如下:

<?php 
    use Illuminate\Database\Capsule\Manager;    use Illuminate\Support\Fluent;    //调用自动加载文件函数
    require  __DIR__.&#39;/../vendor/autoload.php&#39;;    //实例化服务器容器,框架的一些功能生成都需要服务容器来实现,服务器容器来来服务注册和解析,比如可以实现下面两个服务的
    //注册。注册之后可以用$app[&#39;router&#39;]来调用服务。
    $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 &#39;../config/database.php&#39;);    $manager->bootEloquent();    $app->instance(&#39;config&#39;,new Fluent);    $app[&#39;config&#39;][&#39;view.compiled&#39;] = "E:\\laravel\\lara\\storage\\framework\\views\\";    $app[&#39;config&#39;][&#39;view.paths&#39;] = ["E:\\laravel\\lara\\resources\\views\\"];
    with(new Illuminate\View\ViewServiceProvider($app))->register();
    with(new Illuminate\Filesystem\FilesystemServiceProvider($app))->register();    require __DIR__.&#39;/../app/Http/Routes.php&#39;;    //实例化请求分发处理程序
    $request =Illuminate\Http\Request::createFromGlobals();    $response =$app[&#39;router&#39;]->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(&#39;view&#39;);            return $factory->make(&#39;welcome&#39;)->with(&#39;data&#39;,$data);
        }
    } ?>
로그인 후 복사

读取一行数据给视图文件welcome
然后在lara\resources\views目录下创建welcome.blade.php,注意后缀为.blade.php,否则无法识别。代码如下:

{{ $data[&#39;name&#39;]}}{{ $data[&#39;age&#39;]}}
로그인 후 복사

主要不要用php标签包围该代码
最后访问localhost:8080/lara/public/index.php/welcome
结果如下:
Laravel과 유사한 프레임워크를 구축하기 위한 컴포넌트 개발 및 작성기 사용 소개
搞定。
这就构建了laravel的基本框架了。大家先试着构建一下,在接下来的文章中再慢慢解释其中的道理。

위 내용은 Laravel과 유사한 프레임워크를 구축하기 위한 컴포넌트 개발 및 작성기 사용 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Composer의 고급 기능: 별칭, 스크립트 및 충돌 해결 Composer의 고급 기능: 별칭, 스크립트 및 충돌 해결 Jun 03, 2024 pm 12:37 PM

Composer는 다음과 같은 고급 기능을 제공합니다. 1. 별칭: 반복 참조를 위해 편리한 패키지 이름 정의 2. 스크립트: 패키지 설치/업데이트 시 데이터베이스 테이블 생성 또는 리소스 컴파일에 사용되는 사용자 정의 명령 실행 3. 충돌 해결: 우선순위 규칙 사용 , 만족 제약 조건 및 패키지 별칭은 설치 충돌을 방지하기 위해 동일한 종속성 버전에 대한 여러 패키지의 다양한 요구 사항을 해결합니다.

PHP 마이크로서비스 컨테이너화의 민첩한 개발 및 운영 PHP 마이크로서비스 컨테이너화의 민첩한 개발 및 운영 May 08, 2024 pm 02:21 PM

답변: PHP 마이크로서비스는 민첩한 개발을 위해 HelmCharts로 배포되고 격리 및 확장성을 위해 DockerContainer로 컨테이너화됩니다. 자세한 설명: HelmCharts를 사용하여 PHP 마이크로서비스를 자동으로 배포하여 민첩한 개발을 달성하세요. Docker 이미지를 사용하면 마이크로서비스의 신속한 반복 및 버전 제어가 가능합니다. DockerContainer 표준은 마이크로서비스를 격리하고 Kubernetes는 컨테이너의 가용성과 확장성을 관리합니다. Prometheus 및 Grafana를 사용하여 마이크로서비스 성능 및 상태를 모니터링하고 경보 및 자동 복구 메커니즘을 생성하세요.

DevOps 프로젝트에서 PHP CI/CD의 역할 DevOps 프로젝트에서 PHP CI/CD의 역할 May 08, 2024 pm 09:09 PM

PHPCI/CD는 빌드, 테스트 및 배포 프로세스를 자동화하여 개발 효율성과 소프트웨어 품질을 향상시키는 DevOps 프로젝트의 핵심 사례입니다. 일반적인 PHPCI/CD 파이프라인은 다음 단계로 구성됩니다. 1) 지속적인 통합: 코드가 변경될 때마다 코드가 자동으로 빌드되고 테스트됩니다. 2) 지속적 배포: 테스트되고 통합된 코드를 프로덕션 환경에 자동으로 배포하여 제공 속도를 높입니다. PHPCI/CD 파이프라인을 구현하면 개발 효율성을 높이고, 소프트웨어 품질을 개선하고, 출시 시간을 단축하고, 안정성을 향상시킬 수 있습니다.

PHP 코드 버전 제어 및 협업 PHP 코드 버전 제어 및 협업 May 07, 2024 am 08:54 AM

PHP 코드 버전 제어: PHP 개발에 일반적으로 사용되는 두 가지 버전 제어 시스템(VCS)이 있습니다. Git: 개발자가 협업 및 오프라인 작업을 용이하게 하기 위해 코드 베이스의 복사본을 로컬에 저장하는 분산 VCS입니다. Subversion: 코드 베이스의 고유한 복사본인 중앙 집중식 VCS가 중앙 서버에 저장되어 더 많은 제어 기능을 제공합니다. VCS는 팀이 변경 사항을 추적하고, 협업하고, 이전 버전으로 롤백하는 데 도움이 됩니다.

PHP 데이터 구조의 시각화 기술 PHP 데이터 구조의 시각화 기술 May 07, 2024 pm 06:06 PM

PHP에는 데이터 구조를 시각화하는 세 가지 주요 기술이 있습니다. Graphviz: 차트, 방향성 비순환 그래프, 의사결정 트리와 같은 그래픽 표현을 생성할 수 있는 오픈 소스 도구입니다. D3.js: 대화형 데이터 기반 시각화를 생성하고, PHP에서 HTML 및 데이터를 생성한 다음 D3.js를 사용하여 클라이언트 측에서 시각화하기 위한 JavaScript 라이브러리입니다. ASCIIFlow: 프로세스 및 알고리즘의 시각화에 적합한 데이터 흐름 다이어그램의 텍스트 표현을 생성하기 위한 라이브러리입니다.

PHP CI/CD를 사용하여 빠르게 반복하는 방법은 무엇입니까? PHP CI/CD를 사용하여 빠르게 반복하는 방법은 무엇입니까? May 08, 2024 pm 10:15 PM

답변: CI/CD 파이프라인 설정, 자동화된 테스트 및 배포 프로세스를 포함하여 빠른 반복을 달성하려면 PHPCI/CD를 사용하십시오. CI/CD 파이프라인 설정: CI/CD 도구를 선택하고, 코드 저장소를 구성하고, 빌드 파이프라인을 정의합니다. 자동화된 테스트: 단위 및 통합 테스트를 작성하고 테스트 프레임워크를 사용하여 테스트를 단순화합니다. 실제 사례: TravisCI 사용: TravisCI를 설치하고, 파이프라인을 정의하고, 파이프라인을 활성화하고, 결과를 봅니다. 지속적인 전달 구현: 배포 도구를 선택하고, 배포 파이프라인을 정의하고, 배포를 자동화합니다. 이점: 개발 효율성을 높이고 오류를 줄이며 납품 시간을 단축합니다.

PHP 배열 페이지 매김에서 Redis 캐시를 사용하는 방법은 무엇입니까? PHP 배열 페이지 매김에서 Redis 캐시를 사용하는 방법은 무엇입니까? May 01, 2024 am 10:48 AM

Redis 캐시를 사용하면 PHP 배열 페이징 성능을 크게 최적화할 수 있습니다. 이는 다음 단계를 통해 달성할 수 있습니다. Redis 클라이언트를 설치합니다. Redis 서버에 연결합니다. 캐시 데이터를 생성하고 "page:{page_number}" 키를 사용하여 각 데이터 페이지를 Redis 해시에 저장합니다. 캐시에서 데이터를 가져오고 대규모 어레이에서 비용이 많이 드는 작업을 피하세요.

Composer는 Composer.lock 파일을 어떻게 처리합니까? Composer는 Composer.lock 파일을 어떻게 처리합니까? Jun 03, 2024 pm 04:40 PM

Composer는 설치된 모든 종속성과 정확한 버전을 기록하는 composer.lock 파일을 사용하여 종속성을 관리하여 다음과 같은 이점을 제공합니다. 일관성을 보장하고 버전 충돌을 방지합니다. 패키지를 반복적으로 검색할 필요 없이 성능을 향상시킵니다. 변경 사항을 추적하고 각 설치 명령 후에 설치된 종속성 버전을 기록합니다.

See all articles