Email function using templates. Includes via ob_start and global vars

前端 未结 3 747
无人及你
无人及你 2021-01-14 08:55

I have a simple Email() class. It\'s used to send out emails from my website.


I also h

3条回答
  •  梦毁少年i
    2021-01-14 09:45

    One solution is to globalize the variables needed not inside the template but inside the function send.

    public static function send($to, $subj, $msg, $options = array()) {
        global $SITE_NAME, $SITE_URL, $name;
    
        /* ... */
        ob_start();
        include '/inc/email/templates/account_created.php';
        $msg = ob_get_clean();
        /* ... */
    }
    

    Another solution is to pass those extra variables as parameters. This maybe ugly as the number of parameters in the set function may grow a lot depending on how many of them you need in your template. To solve this issue, another way of implementing this solution is by passing those extra variables as a hash and create those variables on-the-fly (using the function eval). Here's an example:

    public static function send($to, $extra_vars = array()) {
        foreach ($extra_vars as $key => $value) {
            eval("\$$key = '$value';");
        }
    
        /* ... */
        ob_start();
        include '/inc/email/templates/account_created.php';
        $msg = ob_get_clean();
        /* ... */
    }
    

    Then when you should call send like this:

    $SITE_NAME = "www.somewebsite.com";
    Email::send("recipient", array('SITE_NAME' => $SITE_NAME));
    

提交回复
热议问题