web 框架 DuckPhp 1.2.7 发布——你需要个不写路由表的框架么

2020-10-21 20:20:14 +08:00
 dvaknheo
项目地址: https://github.com/dvaknheo/duckphp
作者 QQ: 85811616
官方 QQ 群: 714610448
//////////////////////

嗯哼,我们从头来捋一遍。作为刚学会 PHP 的新手,我们需要什么样的 Web 框架。

要配置 nginx,apache 才能用? 不配置不行么。
一个域名只能用一个框架。 放在子目录不行么。
要写什么路由表,麻烦,直接类名+方法名型的路由不行么。等我需要再写。

不能直接 echo ? 只能 return $string ?
我只会 sql,还要学个 orm 折腾。 对了,得出来的东西还不能用 var_dump,还必须用 dd();
我先想到怎么用 sql,然后再反推 orm 怎么写。
我看 sql log 得出的慢查询, 不知道应该对应到哪个 orm 的查询语句。

框架没 100% 覆盖测试( DuckPhp 自豪的一点是有 100% 的覆盖测试),有问题。我想替换官方的功能,保证调用方式不变,但实现方式由我来。

默认的 app 命名空间已经被用了。 工程只能用其他名字。

写个 api 那么麻烦么。

我的工程能作为第三方组件给其他人用么。

///////////////////////

1.2.7 相对 1.2.6 主要修复了一些小功能 ,以及改了一些选项和优化

入口文件以后就能省成这样了(前提是你在 composer.json 里加上命名空间映射 LazyToChange => 'app'
```
<?php
require_once(__DIR__.'/../vendor/autoload.php');
$options =[
//'is_debug'=>true,
];

\LazyToChange\System\App::RunQuickly($options);

```
这 $options 有上百项可以在 工程文件 LazyToChange\System\App 看解释

和其他框架的多个配置文件不同,DuckPhp 的组件都带有默认配置,你不需要每在工程里有那么多配置文件。

////
这事个简单的写 api 的例子 不用管其他控制器。 测试模式下 get 可用, 测试之后只能用 post
token 方式的话,很容易就自己加上。

// 访问方式 /test.foo2?a=1&b=2
带有参数的返回。
// 访问方式 /test.foo

```
<?php declare(strict_types=1);
/**
* DuckPhp
* From this time, you never be alone~
*/
namespace {
require_once(__DIR__.'/../../autoload.php'); // @DUCKPHP_HEADFILE
}
namespace Api {
// 后面是业务代码
// 这里自己加 api

interface BaseApi
{
}
class test implements BaseApi
{

public function index()
{
$domain=\DuckPhp\DuckPhp::Domain();
$url=$domain . \DuckPhp\DuckPhp::Url('test.foo');
$url2=$domain .\DuckPhp\DuckPhp::Url('test.foo2?a=1&b=2');
$message = <<<EOT
不带参数访问: {$url}
带参数访问:{$url2} 将会反射到 相应参数
如果需要修改 uid,则继承本扩展 RouteHookApiServer 覆盖 getObjectAndMethod() 和 getInputs()
EOT;

$ret['message']=$message;
$ret['date']=DATE(DATE_ATOM);
return $ret;
}
public function foo()
{
return DATE(DATE_ATOM);
}
public function foo2($a, $b)
{
return [$a + $b, DATE(DATE_ATOM)];
}
}

}
namespace {
$options = [
'is_debug' => true,
'skip_setting_file' => true,
'namespace'=>'',
'override_class' => '',
'ext' => [
'DuckPhp\\Ext\\RouteHookApiServer' => true,
],
'api_server_namespace' => '\\Api',
'api_server_interface' => '~BaseApi',
'api_server_404_as_exception' => true,
];
\DuckPhp\DuckPhp::RunQuickly($options);
}

```
////
在阿里云上捣鼓了一阵 TechEmpower/FrameworkBenchmarks 。没搞定,不知道配置出了什么问题。 他的 py 脚本有时出现 tfb-database 连接不上。
估计了一下,性能上有 50% 。比不上 ubiquity 。但是远强于 laravel 。

本来这个版本计划是加上性能测试再来的。这里先发出来了。

要写的 todo 有好几个,
和 ubiquity 那样上不同平台。
增加 命名行模式(是的,目前只是 web 框架,需要加上 console 插件模式。
增加 安装脚本规范。

加油,希望明年这个时候,能有一小撮人用起来。
2756 次点击
所在节点    PHP
6 条回复
void1900
2020-10-21 22:18:31 +08:00
加油吧,希望明年你能看清自己的框架,回到正途
xiaochong0302
2020-10-21 23:07:11 +08:00
@void1900 生命在于运动(折腾)
hgjian
2020-10-21 23:12:16 +08:00
大半夜的不容易啊,没学会 php,转学 nodejs.了
draguo
2020-10-22 11:46:30 +08:00
不用写路由表,那不是 tp3.2 吗,我需要写路由表,因为路由中间件太香了。另外你这个文档啊,废话太多了,核心点是什么我没看出来,php 框架性能是卖点吗,如果是那 laravel 应该早就死了
dvaknheo
2020-10-22 14:21:58 +08:00
@draguo 核心就是 CURD 程序员不需要学框架里的内容。耦合少。
中间件的缺点: 不知道这东西从哪里冒出来的。 不像控制器构造函数和析构函数那么清晰。

laravel 要学太多东西才能干活。违背了 PHP 的 simple 原则。
leoleoasd
2021-01-02 15:20:29 +08:00
建议先学下怎么用 markdown 贴代码...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/717233

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX