对于一个纤薄的控制器,我有一个很长的任务,我想尽早将输出结束到客户端,然后继续进行后端细化。
$app->get("/test",function() use($app){
$app->render("page.html"); //this is the client output
$app->easlyStop(); //a slim hypothetical command to call
$task=new MyTask();
$task->longAsyncTask(); //this take a few, client don't have to wait.
});
是否有Slim的解决方案?
答案 0 :(得分:0)
这里最简单的选择是调用带有系统调用的方法并在完成之前返回:
exec('/bin/php /path/to/a/script.php > /dev/null &');
请注意,这是一种简化,因为PHP是面向请求的,这意味着每个请求都会启动一个新进程,并且Web服务器会在请求完成后将响应发送给用户。您可以使用flush和其他技术,但这些技术容易出错并且也取决于Web服务器的配置。
答案 1 :(得分:0)
这是一个带有Json视图的Slim控制器的方法:
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_insert2`(
IN P_page_Id int(11) ,
IN P_LanguageCode char,
IN P_page_status int(11),
IN p_created_by int(11),
IN p_created_date datetime,
OUT P_return int)
BEGIN
DECLARE v_isRecordExisting int;
DECLARE v_flags int;
SELECT
COUNT(*)
INTO
v_isRecordExisting
FROM
tbl_cms_pages_languages2
WHERE
page_status in(0,1)
AND
page_id = p_page_Id
AND
languagecode = P_LanguageCode;
IF
v_isRecordExisting = 0
THEN
INSERT INTO tbl_cms_pages_languages2 (
page_Id,
LanguageCode,
page_status,
created_by,
created_date
)
VALUES(
P_page_Id,
P_LanguageCode,
P_page_status,
P_created_by,
p_created_date
);
SET
p_return = 0;
ELSE
SET
p_return = 2;
END IF;
END
我认为这可以很容易地插入Slim插件中。这只适用于Json视图因为这是我的需要,但它可以与Twig或其他Slim视图一起使用ob * php函数输出而不是捕获Stop()异常。