
DNMVCS 1.1.2 发布。
这么多个 PHP 框架,为什么要用 DNMVCS ? 因为 DNMVCS 是无框架派者做的 PHP 框架。 包括有:
框架,只做最小的事情。 不要问 XXX 方案在 XX 框架下如何做。 而是问 XXX 方案应该如何用 PHP 去做。
最小的耦合代码。
使用 DNMVCS 框架的系统,只有入口类和 DNMVCS 系统耦合。
如果你的普通业务代码要用到 DNMVCS 的代码 ,那么肯定是你错了什么。
使用 DNMVCS 的业务系统,是基于组合,而不是继承的。
说得五花八门天花乱坠的 DI ,Facades。
就是为了一个: 如果发生了意外,比如发生安全漏洞,能否在不更改框架文件下解决。 能。
0 依赖也是特点? 至少我们不会因为下游不稳定而出现问题。
5 swoole
附带 swoole 支持。
如何开始
composer require dnmvcs/framework:1.1.2 ./vendor/bin/dnmvcs --create ./bin/start_server.php --no-swoole 示例代码。从教程,你可以完整的了解 DNMVCS 情况
<?php // view/test/done.php ?> <!doctype html><html><body> <h1>test</h1> <div><?=$var ?></div> </body></html> <?php // app/Controller/test.php namespace MY\Controller; // use MY\Base\BaseController; use MY\Base\ControllerHelper as C; use MY\Service\MiscService; class test // extends BaseController { public function done() { $data=[]; $data['var']=C::H(MiscService::G()->foo()); C::Show($data); // C::Show($data,'test/done'); } } <?php // app/Service/MiscService.php namespace MY\Service; use MY\Base\ServiceHelper as S; use MY\Base\BaseService; use MY\Model\NoDB_MiscModel; class MiscService extends BaseService { public function foo() { $time=NoDB_MiscModel::G()->getTime(); $ret="<".$time.">"; return $ret; } } <?php // app/Model/NoDB_MiscModel.php namespace MY\Model; use MY\Base\BaseModel; use MY\Base\ModelHelper as M; class NoDB_MiscModel extends BaseModel { public function getTime() { return DATE(DATE_ATOM); } } <?php require(__DIR__.'/../headfile/headfile.php'); $optiOns=[]; $path=realpath(__DIR__.'/..'); $options['path']=$path; $options['namespace']='MY'; \DNMVCS\DNMVCS::RunQuickly($options, function () { }); 项目地址:
https://github.com/dvaknheo/DNMVCS
欢迎大家给个宝贵意见。
1 dvaknheo OP 自从上次 1.1.0 更新 后,一直没做版本发布。 作为一个目前还没项目在用的库,是否发布也没什么重要吧。发版本,主要还是想听听有人说出什么建议。0 反馈 是始终做不好东西的。 我没有别的渠道宣发,只有这里,和知乎两个地方。 DNMVCS 的特点其实很多,受限于我的个人表达,没怎么体现出来。我希望真有人提出,原来这是什么什么特点。 另一方面,肯定 BUG 也不少, 也有好些我在文档里没提到的,以为大家都懂的,实际上漏掉了。 这就需要沟通,交流,使用,这样才能进步。 我希望这一年内,DNMVCS 系统有机会上线 一个项目。这样就能在实践中锻炼出来了。才有更多动力。 末了,我想给这个框架改个名字,DN - MVCS 这个我觉得可以理解,但是一堆字母毕竟对人不友好。 (刚才发在问与答区了,重新贴) |
2 beiyu 2019-08-25 16:50:40 +08:00 无框架派者为什么要用框架 (逃 |
3 AngryPanda 2019-08-25 17:19:05 +08:00 via Android PHP 最不缺的就是框架了 |
4 zjsxwc 2019-08-25 17:23:08 +08:00 via Android php 只用 symfony |
5 ieliwb 2019-08-25 17:25:43 +08:00 一直用 F3 的飘过 |
6 mogita 2019-08-25 17:38:24 +08:00 能解释一下框架名称吗? 现在很少再有人会给自己的项目起一个无法以一个单词的方式念出来的名字了。 |
8 mamahaha 2019-08-25 17:52:57 +08:00 浏览器地址上的 php 后缀名不藏着的才是真正热爱 php 的,其他的都是假粉。 |
9 dvaknheo OP @beiyu 如果不是为了美化,我还不需要路由,所以 最开始,只需要个路由 ``` <?php use DNMVCS\Core\Route; require(__DIR__.'/../headfile/headfile.php'); class Main { public function index() { var_dump(DATE(DATE_ATOM)); } public function i() { phpinfo(); } } $optiOns=[ 'namespace_controller'=>'\\', ]; $flag=Route::RunQuickly($options); if(!$flag){ header(404); echo "404!"; } ``` DNMVCS\Core\Route 后面还需要什么? DNMVCS\Core\ExceptionManager 异常处理,页面要美化吧。 DNMVCS\Core\View 视图的处理 页眉页脚, 在视图内嵌 include 不方便。 DNMVCS\Core\Configer 设置,配置的处理 这就够称了 DNMVCS\Core 的核心组件。 DNMVCSC\Core 的其他东西 DNMVCS\Core\ThrowOn 就是为了 XXException::ThrowOn(true,"发生异常"); 快速处理异常。 DNMVCS\Core\RuntimeState 这是保持当前 context 的。算预留到 swoole 用。 DNMVCS\Core\AutoLoader 不要 composer 的时候自己的 autoloader. DNMVCS\Core\HttpServer 自带的 HttpServer DNMVCS\Core\SingletonEx 可变单例,核心。 甚至可以作为一个项目出来。 用 DNMVCS\Core\App 把这些东西就凑成了 DNMVCS/Core 这个 框架,就之于 lumen 对应 laravel. 为了让 M V C S 层不要调用 DNMVCS\Core\App ,我们有派生出了 DNMVCS\Base\[M,V,C,S] Helper 这东西就多了。 这些东西,全部就构成了 DNMVCS/Core |
10 dvaknheo OP @mamahaha 浏览器地址上的 php 后缀名不藏着的才是真正热爱 php 的,其他的都是假粉。 DNMVCS 也支持这种模式哦。 选项里配置 RouteHookOneFileMode ``` 'key_for_action'=>'a', 'key_for_module'=>'m', ``` 开启单文件模式。 这样会有 C::URL('A/B?c=d') => xx.php?m=A&a=B&c=d 如果不是用这种模式,不配置服务器 path_info 的情况下,会变成。 C::URL('A/B?c=d') => xx.php/A/B?c=d |
11 liyaoo 2019-08-25 18:49:01 +08:00 via iPhone 这名字好长,是什么意思? |
13 fuxkcsdn 2019-08-25 21:35:06 +08:00 via iPhone 1,没有单元测试 2,没有在实际项目中用过?你的意思是连你们公司都不用?那别人干嘛当你的小白鼠? |
14 dvaknheo OP @fuxkcsdn 1 因为还在初级阶段啊,如果有足够人对他意思,后面的会继续补上。文档写好,代码写好,后一步才是单元测试 2 因为我没当过: 诺, 就要这个项目来做 , 你们当小白鼠去吧 这样的 leader 啊。 |
15 hiboshi 2019-08-25 21:53:32 +08:00 支持你。 |
16 fuxkcsdn 2019-08-25 22:30:42 +08:00 via iPhone @dvaknheo 那你就拿你这框架甩你们 leader 脸上 “呐,这是我写的框架,比公司现有的框架牛逼 X 倍,咱们下一个项目(当前这个项目的重构)就基于我这个框架来写吧” 如果连你们 leader 都不敢(不想)用你这个框架,别人又怎么敢用? |
18 dvaknheo OP 堆栈比较,DNMVCS 的调用堆栈很是清爽,到 view 层也只是 7 层。 #0 include() called at [/mnt/d/MyWork/sites/t/vendor/dnmvcs/framework/src/Core/View.php:40] #1 DNMVCS\Core\View->_Show() called at [/mnt/d/MyWork/sites/t/vendor/dnmvcs/framework/src/Core/App.php:609] #2 DNMVCS\Core\App->_Show() called at [/mnt/d/MyWork/sites/t/vendor/dnmvcs/framework/src/Core/Base/ControllerHelper.php:56] #3 DNMVCS\Core\Base\ControllerHelper::Show() called at [/mnt/d/MyWork/sites/t/app/Controller/Main.php:14] #4 MY\Controller\Main->index() calledat [/mnt/d/MyWork/sites/t/vendor/dnmvcs/framework/src/Core/Route.php:204] #5 DNMVCS\Core\Route->run() called at [/mnt/d/MyWork/sites/t/vendor/dnmvcs/framework/src/Core/App.php:249] #6 DNMVCS\Core\App->run() called at [/mnt/d/MyWork/sites/t/vendor/dnmvcs/framework/src/Core/App.php:103] #7 DNMVCS\Core\App::RunQuickly() called at [/mnt/d/MyWork/sites/t/public/index.php:18] |
19 jksusu 2019-09-01 22:15:49 +08:00 楼主,我在几个月前看到你这个框架,给你留言了 "加油"。继续加油吧! |