@Andre548

Как правильно заменить плейсхолдеры?

Всем привет, есть шаблон с плейсхолдерами, при генерации пдф, нужно заменить плейсхолдеры на данные из бд
вот как выглядит шаблон
663e1c4cddbfa601210602.png

следовательно данные нужно выводить в такой очередности, но столкнулся с проблемой
может быть много программ, следовательно эти переменные нужно заменить и подставить столько раз, сколько есть программ
'[nazvaniye_programmy]'
'[vid_obucheniya]'
'[vsego_chasov]'
'[DATA_S]'
'[DATA_PO]'
'[nomer_diploma]'
'[data_diploma]'

то что у меня получилось
public function printPortfolio()
    {
        $student = Student::with('studentprograms')->find(\request('student_id'));
        $originalTemplate = PortfolioTemplate::first()->body;
        
        $mainPlaceholders = [
            '[FIO_1]' => $student->name,
            '[data_rojdeniya]' => $student->birthday,
            '[pasport]' => $student->passport,
            '[INN]' => $student->inn,
            '[SNILS]' => $student->snils,
            '[Dokument]' => $student->diplom_place,
            '[Nomer_diploma]' => $student->diplom_number,
            '[Data_diploma]' => $student->diplom_date,
            '[Adres]' => $student->registration_address,
            '[Telefon]' => $student->phone,
            '[E-mail]' => $student->email,
        ];
        
        $finalOutput = '';
        
        foreach ($student->studentprograms as $program) {
            $programPlaceholders = [
                '[nazvaniye_programmy]' => $program->program->name,
                '[vid_obucheniya]' => $program->study_type,
                '[vsego_chasov]' => $program->program_period,
                '[DATA_S]' => $program->date_start ? Carbon::parse($program->date_start)->format('Y-m-d') : '',
                '[DATA_PO]' => $program->date_finish ? Carbon::parse($program->date_finish)->format('Y-m-d') : '',
                '[nomer_diploma]' => $program->diploma_number,
                '[data_diploma]' => $program->diploma_date ? Carbon::parse($program->diploma_date)->format('Y-m-d') : '',
            ];
            
            $programOutput = $originalTemplate;
            foreach ($mainPlaceholders as $placeholder => $value) {
                $programOutput = str_replace($placeholder, $value, $programOutput);
            }
            foreach ($programPlaceholders as $placeholder => $value) {
                $programOutput = str_replace($placeholder, $value, $programOutput);
            }
            
            $finalOutput .= $programOutput;
        }
        
        $mpdf = new Mpdf();
        $mpdf->WriteHTML($finalOutput);
        $mpdf->Output('Document.pdf', 'I');
    }


на данный момент есть 2 программы и он 2 раза дублирует общую информацию из
[FIO_1]
[data_rojdeniya]
[pasport]
[INN]
[SNILS]
[Dokument]
[Nomer_diploma]
[Data_diploma]
[Adres]
[Telefon]
[E-mail]

а нужно только программы
  • Вопрос задан
  • 143 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы