Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

preg_replace "e" modifier ile "if ,vs" eval işlemi nasıl yapılır

Konu, 'PHP' kısmında Necronomicon tarafından paylaşıldı.

  1. Necronomicon

    Necronomicon Aktif Üye

    Kayıt:
    1 Ekim 2008
    Mesajlar:
    401
    Beğenilen Mesajlar:
    0
    Meslek:
    C# , Java , PHP ,Java Script
    Şehir:
    Ä°stanbul, Turkey
    Merhaba , geliştirdiğim mvc framework de razor engine benzer bir template engine kastırıyorum. Sıkıntı şu templatede ki " if" deyimi ni "e" modifier eval edince hata veriyor. Kodlar şöyle ;
    Home controller
    PHP:
    class Home extends Controller
    {   
          public function 
    Index(){
             
    $this->Message "Deneme Mesaj";
             
    $this->Title   "Bu bir title"
             
    $this->Status  1;
             
    $this->Sonuc "Durum doğru";
        }
    }
    "Template class" ı
    PHP:
    ...
    ...
    public function 
    __toString()    {        
             
    $ViewData = (array )$this;
             
    extract($ViewData);        
            
    ob_start();
            
    $f file_get_contents($this->__fFILE_USE_INCLUDE_PATH);
            
    $eval = array('$\\2; ',                       
                               
    '\\1',                      
                               
    'if($\\1) { echo $\\3}'); // hata aldığım yer burada         
            
    $syntax = array('#@(.*)[.](.*);#ie',                        
                                  
    '#@@{(.*?)}#i'
                                  
    '#@if [(](.*)[)] {@:(.*)[.](.*)}#ie'
     
    );
                                  
    $line preg_replace($syntax$eval$f);               
                                  
    $buffer $line;
                                 
    ob_end_clean();
                                 return 
    $buffer;
     }
    "Home template" i
    Kod:
    <!DOCTYPE html>
    <html >
    <head>
    <meta charset="utf-8" />
    <title >@ViewData.Title;</title>
    </head>
    <body>
    @@{sample test text}<br />
    @ViewData.Message;<br />
    @if (Status) {@:ViewData.Sonuc}
    </body>
    </html>
    
    
    
    Kod:
    [FONT=Times New Roman][B]preg_replace() [[/B][URL="http://localhost/function.preg-replace"]function.preg-replace[/URL][FONT=Times New Roman][B]]: Failed evaluating code: if($Status) { ;echo $Sonuc}
    [/B]
    hatası alıyıyorum , ne yapmam gerekir , google da araştırıyorum , farklı bir tekniği var eğer nedir ?
    Teşekkür ederim.