下面由composer使用教程栏目为大家介绍如何运用composer实现一个简陋的MVC架构,希望对需要的朋友有所帮助!
背景缘由
网上有许多自己去编写一些类来实现MVC框架的有很多。这个是在我进行项目改造的过程中操作的手法,搭建一个简陋的MVC的简易架构其中model和view是使用的laravel中的。下列实现的方式在很多地方会跟laravel很相似哦,废话不多说,直接上步骤。(这里假设你已经安装了composer)
Step1 Composer init
直接执行composer init,按照步骤一步步下去,创建composer.json文件
使用composer可以实现类的自动加载功能,运用该功能是用来额,怎么说呢,偷懒的。将生成的composer文件按下图修改,然后按下图左边目录结构创建。
修改完配置后执行
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 'link start ^_^'; } }
创建一个配置文件config.php
return [ 'DEBUG' => true, 'timeZone' => 'Asia/Shanghai', 'APP_ROOT' => dirname(__FILE__), 'VIEW_ROOT' => dirname(__FILE__).'/app/View', ];
之后呢,在项目根目录(这里就是mvc目录)下建立一个index.php
<?php /** * Created by PhpStorm. * User: Damon * Date: 2017/12/27 * Time: 15:37 */ $config = require('./config.php'); define('APP_ROOT',$config['APP_ROOT']);//设定项目路径 define('VIEW_ROOT',$config['VIEW_ROOT']);//设定视图路径 //composer自动加载 require __DIR__ . '/vendor/autoload.php'; date_default_timezone_set($config['timeZone']);//时区设定 //获取控制器名称 if (empty($_GET["c"])) { $controller = '\App\\Controllers\\BaseController'; } else { $controller = '\App\\Controllers\\' . $_GET["c"] . 'Controller'; } $method = empty($_GET["m"]) ? 'index' : $_GET["m"];//获取方法名 $app = isAvailableController($controller, $method, $config['DEBUG']);//实例化controller echo $app->$method(); die();
从上面的代码上其是可以看到如果没有传递get参数为c的会自动调用BaseController,该控制器继承自抽象类Controller,里面有个index方法,这里直接return一个字符串link start ^_^ 。那基本上之后要调用某个控制器的某个方法就是用url来实现例如http://localhost/mvc/?c=Test&... 就是调用TestController控制器下的index方法。现在来看下是否内实现:
看来没有问题,其他比较深奥的什么路由重写啊神马的,先不考虑。
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.'/app/View']; const CACHE_PATH = APP_ROOT.'/storage/framework/cache'; public static function getView(){ $file = new Filesystem; $compiler = new BladeCompiler($file, self::CACHE_PATH); $resolver = new EngineResolver; $resolver->register('blade', 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方法
该控制器的代码如下:
namespace App\Controllers; use App\Cores\View; class TestController extends Controller { public function index() { $str = '模板在哪里啊,模板在这里。'; return View::getView()->make('index', ['str' => $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([ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'mes', 'username' => 'root', 'password' => '12345678', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ]); // Make this Capsule instance available globally via static methods... (optional) $capsule->setAsGlobal(); // Setup the Eloquent ORM... (optional; unless you'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 = ['metal_code','metal_name','metal_type','enable','deadline']; protected $table = 'mes_metal'; 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([ 'metal_code' => 'TEST', 'metal_name' => 'test', 'materiel_type' => 1, 'enable' => 0, 'deadline' => 30 ]); $res= Metal::all()->toArray(); var_dump($res); die(); } }
这里有一些限制,就是无法使用laravel中的DB::connect(),不过其他的基础使用好像都可以。并且这里无法切换连接的数据库,这个其实可以将DB类进行修改,至于如何修改,自己想吧。
위 내용은 작곡가를 사용하여 간단한 MVC 아키텍처 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

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

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

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

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

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

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

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


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구

드림위버 CS6
시각적 웹 개발 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

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

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