web 框架 DuckPhp 1.2.7 发布你需要个不写路由表的框架么 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dvaknheo
V2EX    PHP

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

  •  1
     
  •   dvaknheo 2020-10-21 20:20:14 +08:00 3427 次点击
    这是一个创建于 1904 天前的主题,其中的信息可能已经有所发展或是发生改变。
    项目地址: 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 插件模式。
    增加 安装脚本规范。

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

    laravel 要学太多东西才能干活。违背了 PHP 的 simple 原则。
    leoleoasd
        6
    leoleoasd  
       2021-01-02 15:20:29 +08:00
    建议先学下怎么用 markdown 贴代码...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3845 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 04:14 PVG 12:14 LAX 20:14 JFK 23:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86