찾다
개발 도구composer작곡가를 사용하여 간단한 MVC 아키텍처 구현

下面由composer使用教程栏目为大家介绍如何运用composer实现一个简陋的MVC架构,希望对需要的朋友有所帮助!

작곡가를 사용하여 간단한 MVC 아키텍처 구현

背景缘由

网上有许多自己去编写一些类来实现MVC框架的有很多。这个是在我进行项目改造的过程中操作的手法,搭建一个简陋的MVC的简易架构其中model和view是使用的laravel中的。下列实现的方式在很多地方会跟laravel很相似哦,废话不多说,直接上步骤。(这里假设你已经安装了composer)

Step1 Composer init

直接执行composer init,按照步骤一步步下去,创建composer.json文件

작곡가를 사용하여 간단한 MVC 아키텍처 구현

使用composer可以实现类的自动加载功能,运用该功能是用来额,怎么说呢,偷懒的。将生成的composer文件按下图修改,然后按下图左边目录结构创建。

작곡가를 사용하여 간단한 MVC 아키텍처 구현

修改完配置后执行

composer install
composer dump-autoload

Step 2 构建一些基本文件及功能

之后在helper.php文件中添加一个函数,该函数是判断函数及其controller存在与否

if (!function_exists('isAvailableController')) {
    function isAvailableController($controller,$method,$debug)
    {
        if(class_exists($controller)){
            $app =$controller::getinstance();
            //判断调用的方法控制器类中是否存在
            if(!method_exists($controller,$method)){
                echo $controller.'类不存在'.$method.'方法!';
                die();
            }
        } else {
            echo $controller.'类不存在!';
            die();
        }
        return $app;
    }
}

在Controllers目录下新建一个Controller作为抽象类

<?php
/**
 * Created by PhpStorm.
 * User: Damon
 * Date: 2017/12/26
 * Time: 2017/12/26
 * Info: basic controller
 */
namespace App\Controllers;
abstract class Controller
{
    protected static $instance = null;
    final protected function __construct(){
        $this->init();
    }
    final protected function __clone(){}
    protected function init(){}
    //abstract protected function init();
    public static function getInstance(){
        if(static::$instance === null){
            static::$instance = new static();
        }
        return static::$instance;
    }
}

之后在Controllers目录下新建控制器就行了,例如我实现一个TestController,请注意新建的控制器必须以Controller结尾并继承上面的Controller,如下:

namespace App\Controllers;
class TestController extends Controller
{
    public function index()
    {
        echo &#39;link start ^_^&#39;;
    }
}

创建一个配置文件config.php

return [
    &#39;DEBUG&#39; => true,
    &#39;timeZone&#39; => &#39;Asia/Shanghai&#39;,
    &#39;APP_ROOT&#39; => dirname(__FILE__),
    &#39;VIEW_ROOT&#39; => dirname(__FILE__).&#39;/app/View&#39;,
];

之后呢,在项目根目录(这里就是mvc目录)下建立一个index.php

<?php
/**
 * Created by PhpStorm.
 * User: Damon
 * Date: 2017/12/27
 * Time: 15:37
 */
$config = require(&#39;./config.php&#39;);
define(&#39;APP_ROOT&#39;,$config[&#39;APP_ROOT&#39;]);//设定项目路径
define(&#39;VIEW_ROOT&#39;,$config[&#39;VIEW_ROOT&#39;]);//设定视图路径
//composer自动加载
require __DIR__ . &#39;/vendor/autoload.php&#39;;
date_default_timezone_set($config[&#39;timeZone&#39;]);//时区设定
//获取控制器名称
if (empty($_GET["c"])) {
    $controller = &#39;\App\\Controllers\\BaseController&#39;;
} else {
    $controller = &#39;\App\\Controllers\\&#39; . $_GET["c"] . &#39;Controller&#39;;
}
$method = empty($_GET["m"]) ? &#39;index&#39; : $_GET["m"];//获取方法名
$app = isAvailableController($controller, $method, $config[&#39;DEBUG&#39;]);//实例化controller
echo $app->$method();
die();

从上面的代码上其是可以看到如果没有传递get参数为c的会自动调用BaseController,该控制器继承自抽象类Controller,里面有个index方法,这里直接return一个字符串link start ^_^ 。那基本上之后要调用某个控制器的某个方法就是用url来实现例如http://localhost/mvc/?c=Test&... 就是调用TestController控制器下的index方法。现在来看下是否内实现:

작곡가를 사용하여 간단한 MVC 아키텍처 구현

看来没有问题,其他比较深奥的什么路由重写啊神马的,先不考虑。

Step3 实现模板引擎

这里实现模板引擎的方式是使用laravel的blade模板引擎,如何引入呢,这里使用composer来引入一个包来解决。

composer require xiaoler/blade

这个包git上有比较详细的说明,这个是xiaoler/blade包的连接

引入完这个包怎么实现模板引擎呢,我自己是根据包的说明实现了一个View类把他放到Cores目录下内容如下:

namespace App\Cores;
use Xiaoler\Blade\FileViewFinder;
use Xiaoler\Blade\Factory;
use Xiaoler\Blade\Compilers\BladeCompiler;
use Xiaoler\Blade\Engines\CompilerEngine;
use Xiaoler\Blade\Filesystem;
use Xiaoler\Blade\Engines\EngineResolver;
class View
{
    const VIEW_PATH = [APP_ROOT.&#39;/app/View&#39;];
    const CACHE_PATH = APP_ROOT.&#39;/storage/framework/cache&#39;;
    public static function getView(){
        $file = new Filesystem;
        $compiler = new BladeCompiler($file, self::CACHE_PATH);
        $resolver = new EngineResolver;
        $resolver->register(&#39;blade&#39;, function () use ($compiler) {
            return new CompilerEngine($compiler);
        });
        $factory = new Factory($resolver, new FileViewFinder($file, self::VIEW_PATH));
        return $factory;
    }
}

测试一下,http://localhost/mvc/?c=Test&...,也就是调用TestController的index方法

작곡가를 사용하여 간단한 MVC 아키텍처 구현

该控制器的代码如下:

namespace App\Controllers;
use App\Cores\View;
class TestController extends Controller
{
    public function index()
    {
        $str = &#39;模板在哪里啊,模板在这里。&#39;;
        return View::getView()->make(&#39;index&#39;, [&#39;str&#39; => $str])->render();
    }
}

控制器中调用的模板是index.blade.php,内容如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>home view</title>
</head>
<body>
{{ $str }}
</body>
</html>

模板引擎功能OK啦,之后就可以愉快地使用blade模板引擎了,不过有些laravel中自带的一些语法是不能用的哦,该包的git上有说明这里引用下

@inject @can @cannot @lang 关键字被移除了

不支持事件和中间件

Step4 实现Model

这里使用的是illuminate / database包来实现Model的,执行以下命令安装。

  composer require illuminate/database

在Core目录下新建一个DB类,代码如下:

<?php
/**
 * Created by PhpStorm.
 * User: Damon
 * Date: 2017/12/28
 * Time: 9:13
 */
namespace App\Cores;
use Illuminate\Database\Capsule\Manager as Capsule;
class DB
{
    protected static $instance = null;
    final protected function __construct(){
        $this->init();
    }
    final protected function __clone(){}
    protected function init(){
        $capsule = new Capsule;
        $capsule->addConnection([
            &#39;driver&#39; => &#39;mysql&#39;,
            &#39;host&#39; => &#39;localhost&#39;,
            &#39;database&#39; => &#39;mes&#39;,
            &#39;username&#39; => &#39;root&#39;,
            &#39;password&#39; => &#39;12345678&#39;,
            &#39;charset&#39; => &#39;utf8&#39;,
            &#39;collation&#39; => &#39;utf8_unicode_ci&#39;,
            &#39;prefix&#39; => &#39;&#39;,
        ]);
        // Make this Capsule instance available globally via static methods... (optional)
        $capsule->setAsGlobal();
        // Setup the Eloquent ORM... (optional; unless you&#39;ve used setEventDispatcher())
        $capsule->bootEloquent();
    }
    //abstract protected function init();
    public static function linkStart(){
        if(static::$instance === null){
            static::$instance = new static();
        }
        return static::$instance;
    }
}

这样在controller中就可以使用了,例如先在app目录下建立Model目录,在Model中新建一个Model文件Matter.php。

<?php
/**
 * Created by PhpStorm.
 * User: Damon
 * Date: 2017/12/28
 * Time: 9:52
 */
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class Metal extends Model
{
    protected $fillable = [&#39;metal_code&#39;,&#39;metal_name&#39;,&#39;metal_type&#39;,&#39;enable&#39;,&#39;deadline&#39;];
    protected $table = &#39;mes_metal&#39;;
    public $timestamps = false;
}

之后可以在控制器中这么使用:

<?php
/**
 * Created by PhpStorm.
 * User: Damon
 * Date: 2017/12/27
 * Time: 16:08
 */
namespace App\Controllers;
use App\Cores\DB;
use App\Cores\View;
use App\Model\Metal;
class TestController extends Controller
{
    public function index()
    {
        DB::linkStart();//连接db
        Metal::create([
            &#39;metal_code&#39; => &#39;TEST&#39;,
            &#39;metal_name&#39; => &#39;test&#39;,
            &#39;materiel_type&#39; => 1,
            &#39;enable&#39; => 0,
            &#39;deadline&#39; => 30
        ]);
        $res= Metal::all()->toArray();
        var_dump($res);
        die();
        
    }
}

这里有一些限制,就是无法使用laravel中的DB::connect(),不过其他的基础使用好像都可以。并且这里无法切换连接的数据库,这个其实可以将DB类进行修改,至于如何修改,自己想吧。

위 내용은 작곡가를 사용하여 간단한 MVC 아키텍처 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 segmentfault에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
작곡가 사용 : PHP의 패키지 관리를 단순화합니다작곡가 사용 : PHP의 패키지 관리를 단순화합니다Apr 18, 2025 am 12:01 AM

Composer는 Composer.json 파일을 통해 프로젝트 종속성을 관리하는 PHP 의존성 관리 도구입니다. 1. 작곡가 설치 : 여러 명령을 실행하여 전역 경로로 옮깁니다. 2. Composer 구성 : Project Root 디렉토리에서 Composer.json 파일 작성 및 ComposerInstall을 실행하십시오. 3. 종속성 관리 : Composer.json을 통해 라이브러리와 해당 버전을 지정하고 시맨틱 버전 번호 컨트롤을 사용하십시오. 4. 자동로드 사용 : 자동로드 필드를 통해 클래스의 자동 로딩 규칙을 정의하여 개발을 단순화하십시오. 5. 패키지 관리 : 개인 라이브러리 관리를 지원하고 리포지토리 필드를 통해 개인 라이브러리 주소를 정의합니다.

작곡가를 사용하여 PHP 프로젝트에서 성능 모니터링을 단순화하는 방법작곡가를 사용하여 PHP 프로젝트에서 성능 모니터링을 단순화하는 방법Apr 17, 2025 pm 11:57 PM

PHP 프로젝트를 개발할 때는 종종 성능을 최적화하기 위해 코드 실행 시간을 모니터링해야합니다. 최근 프로젝트 중 하나에서 문제가 발생했습니다. 다른 코드 세그먼트간에 정확한 타이밍을 수행해야했지만 타이머를 수동으로 구현하는 것은 지루할뿐만 아니라 오류가 발생하기 쉽습니다. 약간의 탐사 후, 나는 작곡가를 통해 쉽게 통합되어 내 작업을 크게 단순화하는 라이브러리 PHPUNIT/PHP 타이머를 발견했습니다.

버전 관리 문제 해결 : PHAR-IO/버전 라이브러리 사용 안내서버전 관리 문제 해결 : PHAR-IO/버전 라이브러리 사용 안내서Apr 17, 2025 pm 11:54 PM

버전 관리는 개발 중, 특히 패키지 종속성을 다룰 때 어려운 문제였습니다. 최근 프로젝트에서 버전 제어 문제를 겪었습니다. 프로젝트가 올바르게 의존하고 업그레이드 할 수 있도록 다양한 패키지의 버전 정보를 정확하게 관리하고 비교해야합니다. 몇 가지 방법을 시도했지만 결과는 만족스럽지 않았습니다. 결국, 나는 도서관 phar-io/버전을 발견하여 내 문제를 완벽하게 해결했습니다.

Composer와 PHP8.3 기능의 역 호환성을 쉽게 달성합니다Composer와 PHP8.3 기능의 역 호환성을 쉽게 달성합니다Apr 17, 2025 pm 11:51 PM

프로젝트를 개발할 때는 종종 새로운 버전의 PHP 기능을 사용해야하지만 때로는 서버 환경의 한계로 인해 낮은 버전의 PHP를 사용해야합니다. 이로 인해 PHP8.3에 도입 된 JSON_VALIDATE 및 OVERTRIDE와 같은 새로운 기능을 사용할 수 없게됩니다.이 문제를 해결하기 위해 Symfony의 PolyFill-PHP83 라이브러리를 발견하여 이러한 새로운 기능을 낮은 버전의 PHP에서 사용할 수 있습니다.

Composer를 사용하여 PHP 코드 라인을 쉽게 계산하는 방법Composer를 사용하여 PHP 코드 라인을 쉽게 계산하는 방법Apr 17, 2025 pm 11:48 PM

PHP 프로젝트를 개발할 때 특히 프로젝트 크기를 평가하거나 코드 검토를 수행 할 때 코드 줄 수를 계산하는 것이 일반적인 요구 사항입니다. 그러나 수동 통계는 시간이 많이 걸리고 오류가 발생하기 쉽습니다. 최근에 저는 프로젝트 에서이 요구 사항을 발견했습니다. 여러 가지 방법을 시도한 후 마침내 Composer를 통해 Sebastian/Code 라이브러리를 설치 하여이 문제를 쉽게 해결했습니다.

PHP 타임 아웃 문제 해결 : PHPUnit/PHP-Invoker 라이브러리의 적용PHP 타임 아웃 문제 해결 : PHPUnit/PHP-Invoker 라이브러리의 적용Apr 17, 2025 pm 11:45 PM

PHP 프로젝트를 개발할 때는 종종 일부 기능이나 방법이 너무 오랫동안 실행되어 프로그램 타임 아웃을 유발한다는 문제가 발생합니다. 여러 솔루션을 시도했지만 PHPUNIT/PHP-Invoker 라이브러리를 발견 할 때까지 결과는 만족스럽지 않습니다. 이 라이브러리는 실행 가능 기능을 호출하기 위해 시간 초과 시간을 설정하여 내 문제를 완전히 해결했습니다.

작곡가를 사용하여 파일 유형 감지 문제를 해결하는 방법작곡가를 사용하여 파일 유형 감지 문제를 해결하는 방법Apr 17, 2025 pm 11:42 PM

파일 처리 시스템을 개발할 때 까다로운 문제가 발생했습니다. 파일의 파일 유형을 정확하게 감지하는 방법. 처음에는 PHP의 내장 기능 MIME_CONTENT_TYPE () 및 FINFO 클래스를 사용해 보았지만 특정 특수 파일을 처리 할 때 이러한 메소드가 충분히 안정적이지 않아 시스템이 파일 유형을 잘못 판단하여 사용자 경험에 영향을 미쳤습니다. 약간의 탐사 후, 나는 도서관 리그/마임 유형의 감탄을 발견하여 프로젝트에 완벽한 솔루션을 가져 왔습니다.

작곡가를 사용하여 수집 데이터를 쉽게 관리하는 방법 : Ramsey/Collection Library의 응용작곡가를 사용하여 수집 데이터를 쉽게 관리하는 방법 : Ramsey/Collection Library의 응용Apr 17, 2025 pm 11:39 PM

프로젝트 개발에서 수집 데이터를 효율적으로 관리하고 조작하는 방법과 같은 일반적인 문제가 발생했습니다. 나는 여러 가지 방법을 시도했지만 복잡한 데이터 구조를 다룰 때 항상 유연하고 효율적이지 않다고 생각합니다. 나중에 Ramsey/Collection Library를 발견하여 개발 경험을 완전히 바꿨습니다.

See all articles

핫 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를 무료로 생성하십시오.

뜨거운 도구

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.