CodeIgniter soru

5 Cevap php

Ben yeni bir proje için CodeIgniter'ı kullanma hakkında düşünüyorum. Ben CI için kullanıcı kılavuzunu okuyor ve ben bir kaç şey fark ettim. Bütün bu örneklerde, onlar Controller tüm mantığı koymak ve sadece veri almak ve ayarlamak için modelini kullanmak gibi. Benim Modelinde tüm mantığı koymak gibi.

3 parça (model, görünüm ve denetleyici) evrensel ya da tüm fonksiyonlar tüm sorunlar olacaktır denetleyicisi aksine modelinde mantık yapmak için çalışıyorum.

Ayrıca, 3 parça (model, görünüm ve denetleyici) için erişilebilir tüm değişkenler. Ben bir kullanıcı görünümü içinde oturum açmış olup olmadığını bilmek istedim, ben kumandadan görünümüne bu bilgileri geçmek zorunda veya görünümü içinde erişilebilir zaten istiyorsunuz?

Ayrıca, ben onlar şifreli olsa bile, oturum veriler çerezler içinde depolanan olduğunu fark ettim. Kullanmak için yeterince güvenli şifreleme, oturumları kullanarak daha fazla kullanılan im beause. Ayrıca, ne kadar bu tanımlama varsayılan olarak depolanır? Herkes bu kadar net eğer ben, o kısmı hakkında biraz karıştı.

Benim öğrenme bu yeni çerçeve yardım için başka bir ipucu varsa, bunu takdir ediyorum.

Teşekkürler

EDIT: Ben birden fazla yerde aynı işlevleri kullanın böylece, Fat Modeller ve sıska denetleyicileri kullanmak ister.

Sadece Kohana hakkında okuyun, ben o daha fazla bakacağız düşünüyorum

5 Cevap

onlar Controller tüm mantığı koymak gibi görünüyor ve sadece veri almak ve ayarlamak için modeli kullanın.

CodeIgniter kendi modellerinin çok az mantık beklediğini ve bunun yerine size veri temsil etmek POD türleri basit dizileri dönen için çok aptal SQL wrapper verir. Hatta (bence) yanlış ve tekrarlayan olan kontrolörler içine doğrulama kodu bir sürü koyar. Gibi şeyler sağlayan, Rayları tarzı içinde-model doğrulama ve dinamik bulmak yöntemi için kendi çözüm haddelenmiş ettik

// inside model: 
// username must be 8 to 25 chars long
$this->validates_length_of('username', 8, 25);

// dynamically handled via __call()
$this->User->find_first_by_username('john'); // Return object or null
$this->User->find(); // select *
$this->User->find_by_group('admin'); // return 0 or more records

ama AFAIK CodeIgniter ile benzer şeyler yapmanın herhangi yerleşik bir yolu yoktur.

Ayrıca, tüm 3 parçaları için olan tüm değişkenler

No; elle görünümüne denetleyicisi kendi değişkenleri geçmek zorunda, ve modelleri / kontrolörleri veya modelleri / manzaralı değişkenlerin hiçbir paylaşımı yoktur.

Ben CodeIgniter tarafından önerilen yöntem inanıyoruz:

<?php

function users() {
  $data['users'] = $this->User->find(); 

  // must use $data['users'] for controller logic; verbose and annoying

  $this->load->view('users/index', $data); // $users defined for view
}

?>

PHP'nin compact anahtar sözcüğünü kullanarak geliştirilebilir:

<?php

function users() {
  $users  = $this->User->find(); 

  // now we can use $users more easily

  $this->load->view('users/index', compact('users'));
}

?>

Ben oturum veriler çerezler içinde depolanan fark

CodeIgniter bir veritabanında oturum verilerini saklayabilir; config / config.php $config['sess_use_database'] bkz. Oturum çerezinin ömrü ilgilendirmeyen orada diğer yapılandırma ayarları vardır.

Ben CodeIgniter iyi yapar tek şey kendi belgelerine olduğunu söylemek eğiliminde değilim, session configuration ve ilgisi active record (gerçekten bir dil-bağımsız SQL sargının kendi implemntation hakkında daha fazla bilgi Active kayıt deseni ile yapmak)

Sen tamamen doğru olmayan bazı temel örneklerinden varsayımlar çok yaptık.

Controllers interaction mantığı içermelidir.

Bu senin Kontrolörleri sadece, vb görünümleri, kütüphaneler, kullanıcı ne yaptığını dayalı kullanılması gereken modeller söyleyerek gerektiği anlamına gelir.

Models ihtiva data mantığı.

Bu iş mantığı, vergi hesaplamaları, veri işle ilgili her türlü olabilir. Userguide de örnekler sadece bir "veritabanı için dökümü sarıcı" gibi modelleri kullanarak öneririz ama onlarla her şeyi yapabilir. Modeli basit verileri temsil eder ve nereden geldiğini uygulamanızın geri kalanı umurumda değil gerekir.

Benim modeller XML dosyası ayrıştırma, DİNLENME yöntem çağrıları ve tabii ki, bazı ActiveRecord sorguların bir karışımını içerir.

Views sadece şeyler göstermek, bu nedenle giriş / çıkış durumu hakkında hiçbir fikri yok. Elbette sizin kumandadan bunu bu söylemek gerekir (ya da hangi IMHO hemen her iyi ölçekli uygulama ihtiyaçlarına, MY_Controller olarak küresel kodu).

Şifreli kurabiye gibi saklanan oturumları tamamen güvenlidir. Onlar sadece uygulama şifreleme anahtarı bilse bunları çözmek için mümkün olacaktır, ama bir set değil sürece çok düşüktür; bu durumda sadece kendini suçluyorsun.

Kurabiyelere oturumları saklamak çay bardağı değilse, hatta daha güvenli tutmak için veritabanında oturum değerleri saklamak, ya da bir different session library ile çalışmak için yakalayabilir.

CodeIgniter ile hatırlamak şey sadece bunu sevmiyorum, işe uzatmak, geçersiz ya da değiştirmek için yollar öneriyor olmasıdır.

CodeIgniter Model-View-Controller kalkınma deseni dayanmaktadır. Model veri yapılarını temsil eder ve sadece bunun için kullanılmalıdır.

Ben size yeni bir çerçeve öğrenmek istiyorsanız, özellikle bu kuralları takip edecek.

AFAIK, session id şifreli ve kurabiye saklanır, ancak oturum verileri yerel bir veritabanında saklanır edilir.

MVC ana fikri böyle bölümüdür. Ama modeller verilere sadece doğrudan erişim sınırlı değildir, onlar çeşitli veri işleme gerçekleştirebilirsiniz. Fikir php nesneler olarak veritabanında saklanan nesneleri (ve nesnelerin setleri) temsil etmek, bu nedenle itiraz bazı işlevi olması mantıklı görünüyor - eğer bu model sahip olmak kadar mantıklı.

Burada yanlış anlama pek çok web uygulamaları geliştiricileri buna alışmak olduğunu, bazı basit veri işleme dışında neredeyse hiç mantığı var olduğunu düşünüyorum.