V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dvaknheo
V2EX  ›  PHP

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

  •  1
     
  •   dvaknheo · 2020-10-21 20:20:14 +08:00 · 2944 次点击
    这是一个创建于 1501 天前的主题,其中的信息可能已经有所发展或是发生改变。
    项目地址: 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   ·   实用小工具   ·   2586 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 05:40 · PVG 13:40 · LAX 21:40 · JFK 00:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.