php Filament/Laravel:在Filament Action中传递和更新变量

jv4diomz  于 2024-01-05  发布在  PHP
关注(0)|答案(1)|浏览(248)

我是Filament的新手,正在创建一个允许用户输入主题、语言和语气的表单。我正在使用OpenAI API根据这些输入生成专业电子邮件。
下面的代码成功地打开了一个供用户输入此信息的模式,EmailGenerationService()类返回了一个包含电子邮件标题和内容的JSON对象。到目前为止,一切都运行得很顺利。
现在,在操作完成后,我想打开另一个模态来显示生成的电子邮件。但是我不能完成它。下面是我的代码

  1. Action::make('writeEmail')
  2. ->form([
  3. TextInput::make('mail_subject'),
  4. Select::make('mail_language')
  5. ->enum(MailLanguages::class)
  6. ->options(MailLanguages::class),
  7. Select::make('mail_tone')
  8. ->enum(MailTones::class)
  9. ->options(MailTones::class),
  10. ])
  11. ->action(function (array $data) {
  12. $prompt = 'Subject: '.$data['mail_subject'].'. Language: '.$data['mail_language']->value.'. Tone: '.$data['mail_tone']->value;
  13. $service = new EmailGenerationService($prompt, 2000);
  14. $mail['title'] = $service->title;
  15. $mail['content'] = $service->content;
  16. //here I want to add a code to open a new modal to show results
  17. })
  18. ->modalAlignment(Alignment::Center)
  19. ->closeModalByClickingAway(false);

字符串

bq9c1y66

bq9c1y661#

为了在完成动作后打开另一个模态,你可以使用Filament中的Modal类来创建一个新的模态,然后将其作为动作的一部分返回。下面是一个如何修改代码来实现这一点的例子:

  1. use Filament\Forms\Components\Modal;
  2. use Filament\Forms\Components\ModalClose;
  3. use Filament\Forms\Components\ModalContent;
  4. use Filament\Forms\Components\ModalFooter;
  5. use Filament\Forms\Components\ModalHeader;
  6. Action::make('writeEmail')
  7. ->form([
  8. // ... (your existing form components)
  9. ])
  10. ->action(function (array $data) {
  11. $prompt = 'Subject: ' . $data['mail_subject'] . '. Language: ' . $data['mail_language']->value . '. Tone: ' . $data['mail_tone']->value;
  12. $service = new EmailGenerationService($prompt, 2000);
  13. $mail['title'] = $service->title;
  14. $mail['content'] = $service->content;
  15. // Create a new modal to display the generated email
  16. $modal = Modal::make('generatedEmailModal')
  17. ->title('Generated Email')
  18. ->open()
  19. ->component(ModalContent::make()->view('your-view-path', ['mail' => $mail]))
  20. ->component(ModalFooter::make()
  21. ->child(ModalClose::make('Close'))
  22. );
  23. // Return the modal to open it after completing the action
  24. return $modal;
  25. })
  26. ->modalAlignment(Alignment::Center)
  27. ->closeModalByClickingAway(false);

字符串
在此示例中,your-view-path应替换为将呈现生成的电子邮件的Blade视图文件的实际路径。请确保创建相应的Blade视图文件,该文件接收$mail变量并显示电子邮件标题和内容。此模式将在操作完成后打开。

展开查看全部

相关问题