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

jv4diomz  于 5个月前  发布在  PHP
关注(0)|答案(1)|浏览(75)

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

Action::make('writeEmail')
            ->form([
                TextInput::make('mail_subject'),
                Select::make('mail_language')
                    ->enum(MailLanguages::class)
                    ->options(MailLanguages::class),
                Select::make('mail_tone')
                    ->enum(MailTones::class)
                    ->options(MailTones::class),
            ])
            ->action(function (array $data) {
                $prompt = 'Subject: '.$data['mail_subject'].'. Language: '.$data['mail_language']->value.'. Tone: '.$data['mail_tone']->value;
                $service = new EmailGenerationService($prompt, 2000);
                $mail['title'] = $service->title;
                $mail['content'] = $service->content;
                
                //here I want to add a code to open a new modal to show results
            })
            ->modalAlignment(Alignment::Center)
            ->closeModalByClickingAway(false);

字符串

bq9c1y66

bq9c1y661#

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

use Filament\Forms\Components\Modal;
use Filament\Forms\Components\ModalClose;
use Filament\Forms\Components\ModalContent;
use Filament\Forms\Components\ModalFooter;
use Filament\Forms\Components\ModalHeader;

Action::make('writeEmail')
    ->form([
        // ... (your existing form components)
    ])
    ->action(function (array $data) {
        $prompt = 'Subject: ' . $data['mail_subject'] . '. Language: ' . $data['mail_language']->value . '. Tone: ' . $data['mail_tone']->value;
        $service = new EmailGenerationService($prompt, 2000);
        $mail['title'] = $service->title;
        $mail['content'] = $service->content;

        // Create a new modal to display the generated email
        $modal = Modal::make('generatedEmailModal')
            ->title('Generated Email')
            ->open()
            ->component(ModalContent::make()->view('your-view-path', ['mail' => $mail]))
            ->component(ModalFooter::make()
                ->child(ModalClose::make('Close'))
            );

        // Return the modal to open it after completing the action
        return $modal;
    })
    ->modalAlignment(Alignment::Center)
    ->closeModalByClickingAway(false);

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

相关问题