gpt4 book ai didi

php - 如何在 CodeIgniter 中为通用任务实现观察者模式

转载 作者:行者123 更新时间:2023-12-03 17:25:54 24 4
gpt4 key购买 nike

我正在经典 CI mvc 设置中构建应用程序,其中用户具有通用/通用任务列表。
任务的主要目的是告诉用户他必须完成一个特定的 Action ,并将他重定向到他需要完成这个 Action 的页面。

以一种非常简单的方式,任务的 db 方案如下所示:
enter image description here

它自己的任务列表将是一个重定向用户的列表:
enter image description here

我的问题是当用户被重定向到需要发生操作的特定页面时,我们会丢失特定任务的上下文。因此,即使任务完成(在本例中,例如文档被上传),任务本身也不知道这一点,我们也没有真正的连接来更新任务。

经过一些研究,观察者设计模式看起来可以满足这一需求。但是在所有的例子中,我都没有提到如何在我们当前的系统中实际实现这一点。

在处理文档上传的 Controller 中,函数 upload_doc(){} 成功执行后,还应更新连接或订阅此文档上传的任务。

class Dashboard extends MY_Controller{

public function __construct()
{
parent::__construct();

// Force SSL
$this->force_ssl();
}

public function upload_doc(){
//Handle doc upload and update task
}
}

任何人都可以以 noobfriendly 的方式帮助我如何在 CI 框架中实现此设置?

提前致谢!

最佳答案

如果涉及到设计模式,我总是试图找到一个引用文档/github 存储库,其中包含所请求语言的设计模式示例。对于 PHP,我可以在这里热烈推荐这个:

https://designpatternsphp.readthedocs.io/en/latest/Behavioral/Observer/README.html

示例实现可能如下所示。注意:我没有使用 CodeIgniter 的经验。这只是说明如何使用给定代码示例实现这一点的一种方式。

class Dashboard extends MY_Controller 
{
private function makeFile()
{
// I would put this method into a file factory within your container.
// This allows you to extend on a per module-basis.

$file = new File();
$file->attach(new UpdateTask);
$file->attach(new DeleteFileFromTempStorage);
$file->attach(new IncrementStorageSize);
$file->attach(new AddCustomerNotification);
return $file;
}

public function upload_doc()
{
// My expectation is that you have some task-id reference
// when uploading a file. This would allow all observers
// to "find" the right task to update.
$file = $this->newFile();

// enhance your file model with your request parameters
$file->fill($params);

// save your file. Either your model has this functionality already
// or you have a separated repository which handles this for you.
$fileRepo->persist($file);

// Finally notify your observers
$file->notify();
}
}

希望这可以帮助。

关于php - 如何在 CodeIgniter 中为通用任务实现观察者模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60972917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com