PHP Fazlalık?

5 Cevap

.... (Ben onun dediği thats düşünüyorum) MVC modelini kullanıyorum ve küçük sayfalarına sitemde ayrılmış içerir ve eğer mümkünse iki kez aynı koşullu kontrol (hiçbir yarar) güvenli / iyi veya kötü var mı?

Örneğin, şöyle bir hesap sayfası var:

// Must be logged in
if(isset($_SESSION['userID'])){

    include('edit_user.php');

}

ve sonra benim edit_user.php sayfasında ben böyle bir şey var:

// Must be logged in
if(isset($_SESSION['userID'])){

    if(isset($_POST['editUser'])){
        //Validate the form
    }
?>

<form>
// Display the form
</form>

<?php
} // End main IF

Kullanıcı kimliği iki kez ayarlanmış ise çok hoş çok ben kontrol ediyorum ... Ben (kullanıcılar giriş yapmış olmanız gerekir) tüm sayfaları aynı şeyi yapıyor tatlı lapa değilim. Bu gerçekten gerekli mi? Benim ilk düşünce (kullanıcıların doğrudan sayfaya erişmek yoksa ben de sadece yönlendirme düşünüyordum) doğrudan edit_user.php formu erişimde ve şeyler yapıyor kayıtsız kullanıcıların önlemek oldu. Siz ne / öneririz düşünüyorsunuz?

Edit

Ben burada daha iyi benim soru için nedenler kızdırmak için iyi bir örnek ... Sadece bir örnek oldu ... çok net bir şekilde kendimi açıkladı sanmıyorum:

... Hesabı sayfası

if(isset$_SESSION['userID'])){

    include('edit_user.php');// edit user form

    include('change_password.php');// change password form

    include('change_pic.php');// change photo form

}

ve Sesimin her içinde içerir, yine bir SESSION['userID'] ... Peki, siz şimdi ne önerirsiniz için soruyorum?

5 Cevap

Peki, bu (DRY) tasarımı "ilkesini tekrar edin etmeyin" ihlal eden, gereksiz olduğunu. Lütfen edit_user.php dosya kamuya açık ise, o zaman kesinlikle orada kontrolleri gerekir, bu yüzden muhtemelen sürece işlevsellik emin olarak, diğer kontrolleri kaldırmak olabilir.

Bu kod, daha fazla bakım sorunlarını neden olacak gibi uzun vadede fazlalık, ancak, yerinde kontroller ile net olduğunu tartışılabilir.

Orada birden kontrolleri olması gerekmez. Tüm istekleri denetleyicisi üzerinden giderseniz, o zaman sadece denetleyicisi onay eklemeniz gerekir gerekir. Bu isteği yönlendirmek için, kontrol noktasıdır. Görünümü verileri verir. Model veritabanı ile etkileşim (ve iş mantığı zorlar).

Birçok durumda fazlalık faydalıdır, ama örnekte bu gereksiz. Ayrıca KURU ilkesine (tekrar edin etmeyin) aykırı. Daha sen aynı kodu, sen atık daha fazla zaman (aynı zamanda nedeniyle tekrarı için kod hataları ekleme olasılığı yüz) tekrarlayın. Siz sadece edit_user.php check ile ince olmalıdır.

Eğer MVC kullanıyorsanız bu yana, burada ben tavsiye budur: dünya çapında erişilebilir bazı doğrulama işlevleri tanımlayın. Sonra, kontrolör yapıcı yöntemleri, kullanıcının bu bölüme erişim izni gerektiğini görmek için kullanabilirsiniz. Onlar yetkili değil iseniz başka bir sayfaya yönlendirmek, ya da örneğin bir hata mesajı görüntüleyebilir. Tabii ki bir ince-taneli metodoloji kullanmak ve bazı denetleyici yöntemler başında kimlik doğrulama fonksiyonları için arama yapabilirsiniz.

Her zaman sizin kontrolünüz dışında gelir girişi doğrulamak gerekir, böylece bir kullanıcı tarafından erişilebilen her php script kontrol etmelisiniz.

Bir kullanıcı sitenize derin 10 formları bir sayfa url bir bağlantı görebilirsiniz eğer, onu beklemek bile o yine de bunun doğrudan atlayabilirsiniz.

Joomla her PHP dosyasının en üstünde bu doğru koymak için güzel bir yöntem kullanır:

defined('_JEXEC') or die('Restricted access');

_JEXEC ana giriş noktası olarak tanımlanır. Gibi bir şey yapabilirsiniz:

if ( isset($_SESSION['userID']) ) {
    define('LOGGED_IN', 1);
    include('edit_user.php');
}

: Edit_user.php ve diğer dosyaları ile bu

defined('LOGGED_IN') or die('You must be logged in.');