php как разобрать подстановку переменных без печати - PullRequest
1 голос
/ 08 марта 2020

как проанализировать переменную внутри строки?

вот пример кода, который работает:

$str =  "12345";
$str2 = "STR:{$str}";
$str3 = $str2;
echo $str2;
echo $str3;

, но это не будет работать:

$otp = 12345;
$template = MessageTemplate::where('type',1)->first(); //db query
$message = $template->content; //content field, "OTP:{$otp}" 
echo $message;

это код печатает OTP:{$otp} вместо OTP:12345

вот что нам нужно:
$member = Member::where('id',$id)->with('position')->with('company')->first(); $otp = 12345; $template = MessageTemplate::where('type',1)->first(); //db query $message = $template->content; //content field, "OTP:{$otp}" $sms = Sms::Create(['mobile'=>$member->mobile,'message'=>$message]);

этот код печатает OTP:{$otp} вместо OTP:12345

Спасибо за ваши ответы. На самом деле мне нужно разобрать его перед сохранением в базе данных. строка «OTP: 12345» должна быть записана обратно в базу данных. а также переменные являются динамическими c. Это шаблон, позволяющий администратору настраивать сообщение, поэтому администратор может добавить столько переменных, сколько он / она хочет. Например: "{$ member-> title}, {$ member-> firstName}, {$ member-> lastName}, чтобы убедиться, что вы {$ mamber-> position-> name} из {$ member- > company-> name}. введите код {$ otp} ".

, поэтому я не могу использовать str_replace. а также наша база данных поддерживает json, поэтому администратор может добавить пользовательский атрибут в $ member

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

Значением $ template-> content является просто строка.

Вы можете просто сделать замену:

$message = str_replace('{$otp}', $otp, $template->content);
0 голосов
/ 08 марта 2020

Вы можете использовать мутаторы в вашей модели следующим образом

// MessageTemplate class
public function getContentAttribute($string)
{
    return 'OTP:' . $string;
}

// anywhere in controller
$message = $template->content; // will call content mutator
echo $message;
...