fastdlabs / fastd Goto Github PK
View Code? Open in Web Editor NEW:rocket: A high performance PHP API framework.
Home Page: https://fastdlabs.com
License: MIT License
:rocket: A high performance PHP API framework.
Home Page: https://fastdlabs.com
License: MIT License
是否支持热加载
bootstrap初始化,在注册异常回调和增加logger服务中间发生异常,会获取不到logger服务
因为配置在config
目录下的配置文件几乎全部都是框架启动所必须的组件,所以为什么不直接帮用户注册进去呢? 我现在是这么干的..
$dir = app()->getPath().'/config';
$config = $container->get('config');
$config->load($dir.'/config.php');
array_map(function($filename) use(&$config, $dir) {
$config->merge([
str_replace('.php', '', $filename) => load("{$dir}/{$filename}")
]);
}, array_diff(
scandir($dir),
[
'.',
'..',
'routes.php',
]
));
if (file_exists(app()->getPath().'/.env.yml')) {
$config->merge(load(app()->getPath().'/.env.yml') ?: []);
}
这样的话兼容了原有的写法,然后 新增加的配置还可以直接使用
父类控制器注释路由,子类继承会造成路由重复。需要排序,去重。
请问这个如何优化呢?
[2018-10-24 17:29:03] cmsboot.ERROR: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away {"msg":"SQLSTATE[HY000]: General error: 2006 MySQL server has gone away","code":"HY000","file":"/var/www/cmsboot-api/app/src/Lib/Model.php","line":73,"trace":["#0 /var/www/cmsboot-api/app/src/Lib/Model.php(73): PDO->beginTransaction()",
$this->db->pdo->beginTransaction();
Maybe, it is necessary to add transaction methods into the fastd database class. So, it is possible to reconnect to the mysql automatically.
ORM支持有计划吗?或者有没有快速继承ORM的方法
1 韩天峰在wiki 说了 https://wiki.swoole.com/wiki/page/851.html 貌似2.X 不支持 molten 会崩溃
2 molten结合Zipkin的分析 在swoole里面,swoole因为是常驻内存的会识别成一个cli启动
目前发现一个bug,连接mysql,当框架的db连接的wait时间超过mysql的wait_timeout配置后,框架所有的db连接会不可用。这时通过getConnection($key)其实获取的是一个无效连接,造成数据库操作失败。
一些公共函数,如随机字符串、加密有函数,计划放src\Server中,在控制器中如何引用
namespace Services;
class UserServer
{
public function random_str(){}
}
swoole模式下,修改了routes文件,使用reload 命令没有效果,需要stop再start
:)
Very glad to share my work:
如题。
你好,中间件对post无效?
route()->post('/abc', 'WelcomeController@welcome')->withMiddleware('validator');
$_GET就就可以
route()->�get('/abc', 'WelcomeController@welcome')->withMiddleware('validator');
执行 php bin/console config:cache 无法缓存prod生产环境配置信息。用于仅是将 dev 或者 test 环境配置缓存.
目前的1.2版本有一些问题。比如action正常情况下没有返回值,只有错误情况才返回。官方在1.5.3已经做出了修改。
可以与模版引擎结合使用吗?
你好,
1、swoole模式下运行,怎样做可以代码热部署?
2、用php内置代理服务器和swoole模式运行,功能效果是一样的吗?不考虑性能
1、如何在model层获取表前缀,我要在model层直接$this-db->query($sql),所以要用到表前缀
2、直接query SQL语句,可以防止注入吗?
注释路由重复调用,命令行debug无法显示路由命
/**
* @Route("/page/{page}", name="api_articles_page", defaults={"page": 1})
* @Formats(["json"])
* @Methods(["GET"])
*
* @param Request $request
* @param int $page
* @return Response|string
*/
public function articlesAction(Request $request, $page = 1)
{
return $this->response(["msg" => 'hello world']);
}
如题,我用的是最新版本的框架,今天发现好多的异常,追查后发现是因为第一次连接失效的时候,抛出的异常是ErrorException,异常码是0,异常信息是PDO::query(): MySQL server has gone away,查询失败。但是第二次再query的时候,抛出的异常就变为了PDOException,就可以触发reconnect机制
请教一个问题,有时候我们给出去的API接口可能会存在 1.0 版本、2.0版本等不同版本,这种情况下您建议怎么做呢?是新开一个接口或者其他什么呢?
我将框架升级到最新之后,发现一直报错
PHP Fatal error: Uncaught InvalidArgumentException: The source URI string appears to be malformed in /home/www/log-api/vendor/fastd/http/src/Uri.php:400
然后追查后发现,是因为调用ServerRequest::createUriFromGlobal函数时,生成的uri错误,缺失了host信息
进一步追查发现,这个问题只有在启用nginx反向代理转发请求才会发生,而直接请求发送到框架是没问题的
最后,发现swoole_http_request对象,如果启用了nginx反向代理
那么header里的host值即为ip
你好,有这样一个需求,批量给APP推送消息,因为量比较大想用消息队列做,该如何实现,谢谢
RT.
Server: fast-d(3.1)
App version 2.0.0 (dev)
Swoole version 1.9.10
Fatal error: Uncaught Error: Class 'UserController' not found
$vendor/fastd/routing/src/RouteMiddleware.php:48
$route = route();
$route->get('/', 'IndexController@index');
$route->group('/user', function ($route) {
$route->get('/', 'UserController@get');
$route->post('/', 'UserController@post');
$route->put('/', 'UserController@put');
$route->delete('/', 'UserController@delete');
});
get、post没问题,put、delete就报错
有些操作比较简单,不想通过model层处理,直接在控制器中处理数据。
就像在model层操作一样
$this->db->select()
fastd/fastd v3.1.7 的依赖关系中,需要 fastd/middleware:~1.0.0。
fastd/routing v3.1.3 的依赖关系中,需要 fastd/middleware: ~1.0.0。
而 fastd/routing v3.1.4 的依赖关系中,需要 fastd/middleware: ^1.1。
这样,fastd/routing 最高使用版本为 v3.1.3。
fastd/fastd v3.1.7 composer.json
fastd/routing v3.1.3 composer.json
fastd/routing v3.1.4 composer.json
嗯嗯,确实还是有那么一点,只是有那么一点点啦,没有sf那么神,因为有参照过symfony和laravel来做。当然会慢慢发展自己的风格。
主键递增,不应该出现默认值.
CREATE TABLE `api_downloads` (
`id` int(11) NOT NULL DEFAULT "0" AUTO_INCREMENT COMMENT "",
`name` varchar(32) NOT NULL DEFAULT "" COMMENT "",
`url_cn` varchar(100) NOT NULL DEFAULT "" COMMENT "",
`url_ios` varchar(100) NOT NULL DEFAULT "" COMMENT "",
`url_gm` varchar(100) NOT NULL DEFAULT "" COMMENT "",
`create_at` int(10) NOT NULL DEFAULT "0" COMMENT "",
`update_at` int(10) NOT NULL DEFAULT "0" COMMENT "",
PRIMARY KEY (`id`)
) ENGINE InnoDB CHARSET utf8 COMMENT "";
我有个之前已经做好的API框架,是基于swoole的,其中有个api使用了task功能,会在里面做一些其它操作,然后落地为日志,供agent采集。我看了fastD,版本3.0.0,没找到合适的实现方式,请问,这个框架可以支持吗?
文档中没有详细描述怎么处理,请问下,出现php bin/server start 报错正确方式应该怎么处理?复制文件还是到指定目录来install?
你好,大致看了下文档以及框架结构,感觉非常棒。
想在实际项目中使用,不过要确定的一下,这个项目会一直维护发展下去吗?
最近在用dobee
开发一些功能,发现通过$request->getParsedBody()
方法拿不到Content-Type:application/json
提交过来的数据.
建议在这种情况下是否可以将raw
中的数据直接复制给$_POST
获取参数?
另外提交pr的话是提交到这个仓库么? 还是提交至组件由你来更新项目依赖
(1)如果主服务是tcp,想再监听HTTP,也是可以的,需要在port中设置启用http即可,同理,websocket启用websocket即可。但是需要在port中实现对应的处理逻辑。
(2)您的框架在主服务是http或websocket时,想在port再监听一个http或websockt时,您的swoole\server.php handleCallback()中,不能添加onrequest回调。因为$callbacks = ['onConnect', 'onClose', 'onReceive', ]。这个地方不太理解您的用意。望能解释一下,为何这里限制。
框架启动时,会自动初始化大量db连接,数目=worker+task_worker的总和,这样会造成一个问题,当大批量机器部署时,框架启动时很容易就超过数据库配置的默认最大连接数,导致在一段时间内不会接受新的连接,这块是不是能再优化下?
database继承Medoo,Medoo在实例PDO时有option、cammand等参数,比如option用于PDO::setAttribute()来设定PDO的一些预常量,常见的如$this->pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION),在$db->exec($query)时如果$query错误才会抛出异常。建议在pool实例database时加入
'option' => isset($config['option']) ? $config['option'] : ''等Medoo配置
你好,
1、如何做到在所有接口增加密钥(自定义密钥)验证?
2、App如何保持登录状态,之前用cookie/session方式?
目前的做法是新建一个 Class 继承 \FastD\Application,然后覆写 run() 方法,比如:
$request = ServerRequest::createServerRequestFromGlobals(); // 原有代码
$response = $this->handleRequest($request); // 原有代码
// 在这里增加 header 动作,具体 header 信息在 Controller 中设置,通过一个 Container 暂存 header 信息
$response = $response->withHeaders(...);
$this->handleResponse($response); // 原有代码
return $this->shutdown($request, $response); // 原有代码
还有一种方法,就是通过 middleware 实现,在 Dispatcher::before() 中执行,但感觉对使用者也不友好。
不知道是否有更好的方式?
现在notice都会中断程序,如何设置只有在错误时中断程序
{
"msg": "Undefined index: view_info",
"code": 0
}
Is there any chance that we can see English documentation ?
After awesome swoole extension many users around the world need to how to use fastd
or other repositories ?
路由配置
route()->post('/myschedule', 'ScheduleController@schedule_running');//计划任务
报错信息
{
"msg": "Route \"/%08myschedule\" is not found.,File=endor/fastd/routing/src/RouteCollection.php,Line=276",
"code": 404
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.