Nedir php kullanıcılara hataları / mesajları göstermek için iyi bir yoldur?

2 Cevap php

Ben yıllardır kendi yöntemini kullanarak edilmiştir, ama ben bu konuda gitmek için onun değil en iyi yolu belki de düşündüm.

Ben bir kullanıcı, ya da başarılı bir eylem ekran onay bir hata atmak istiyorum Esasen, ben aşağıdakileri yapın:

if($something == "condition") {

   $_SESSION["message"] = "Your passwords didnt match! Make sure they are the same in both fields!";
   $_SESSION["message_type"] = 1;
   header("Location:register.php");
   exit();

}

sonra ben gibi bir işlevi var

function show_message() {
   global $_SESSION;

   if (isset($_SESSION["message"])) { 
      echo "<div class='site_message type_" . $_SESSION["message_type"] . "'>" . $_SESSION["message"] . "</div>"; 
      unset($_SESSION["message"]); 
      unset($_SESSION["message_type"]); 
   }
}

ve ben) (show_message koymak; Bu sayfaya atmak olabilir olası hataları görüntülemek için her sayfanın üstünde.

Bu ile olası sorunlar nelerdir?

2 Cevap

I see nothing wrong with this approach. You'll find this technique under different names in quite a number of frameworks, for instance FlashMessenger in Zend Framework. Usually the Session is wrapped in an object instead of the regular Session array and with a ViewHelper instead of a function.

Mesajı atarken Oturum tuşlarından herhangi bir yazım hatası yok emin olmak için, siz de bir işlevi atama kodu sarın, örneğin

function set_message($text, $type)
{
    $_SESSION['message'] = array(
        'text' => $text,
        'type' => $type
    );
}

Sen fonksiyonunu return dize yerine echo bunu ing olan bunu geliştirmek ve şahsen sprintf çıkışı biçimlendirmek için kullanmak istiyorum. Kod biraz daha okunabilir IMHO, örneğin yapar

return sprintf('<div id="message-box" class="type-%s">%s</div>',
                $_SESSION["message"]["text"], 
                $_SESSION["message"]["type"]);

@ Bamya işaret gibi, Sessions işe yaramazsa işlevi işe yaramayabilir, ama büyük olasılıkla daha sonra tüm uygulama için diğer sorunları bir dizi empoze edecek, ben tam o kodu bu özel parça hakkında rahatsız olmaz.

Küçük bir şey: $ _SESSION a superglobal, yani global anahtar kelime kullanmak zorunda değilsiniz.

Dürüst olmak gerekirse, ben değil oturumlar ile, ancak URL ile bu yapardı.

Bunun yerine bir mesaj ayarı, 'Sistem mesajlar' içeren bir sınıf yapmak

 class SystemMessages{
    protected $messages = array(
          0 => "Some Error Message");

    public function getMessage($id)
    {
        return $this->messages[$id];
    }
 }

Ardından, register.php üzerinde, bir URL parametresi için kontrol edin:

$messageObject = new SystemMessages;
if(!empty($_GET['message']))
{
    $message_id = intval($_GET['message']); // Clean User Input
    $message = $messageObject->getMessage($message_id);
    // handle message
}

SADECE bir mesajı gösteren iseniz, o zaman gerçekten 'hassas' veri değildir ve bu nedenle URL koymak için mükemmel ince olmalıdır.

Sonra sadece

 header('Location: register.php?message=0');

Çerezler olmadan / ile çalışır ve bunu çok daha merkezi. Eğer bir mesajın ifade değiştirmek istiyorsa, tüm iletileri aynı yerdesiniz.

Sadece bir düşünce ....