Veritabanı sütun adları views sabit kodları görüşlerine sql sonuçları Passing

2 Cevap php

Ben sadece ben MVC deseni konusunda en iyi uygulamaları takip etmiyor olabilir fark etti.

Benim sorun benim görüşlerim benim veritabanı hakkında bilgi "bilmek" olduğunu

İşte pseudo kod benim durum ...

Benim controller benim model bir yöntemi çağırır ve görünümüne doğrudan geçer

view.records = tableGateway.getRecords() // gets array of records
view.display()

Benim görüşüme

each records as record
    print record.name
    print record.address
    ...

Benim görüşüme göre ben kaydı var. name ve kayıt. address, sabit kodlanmış benim veritabanına bulunuyor bilgisi. Bu kötü mü?

Orada denetleyicisi her şeyin üzerinde yineleme ve temelde kayıt toplamayı yeniden dışında başka neler etrafında yolu vardır. Ve bu sadece saçma görünüyor.

Thanks


EDIT
Heres an actual view

<?php foreach( $categories as $category ): ?>
    <tr>
        <td><?php echo $category['name'] ?> </td>
        <td><?php echo $category['fields'] ?> </td>
        <td><?php echo $category['records'] ?></td>
        <td><a href="/category/view/<?php echo $category['id'] ?>/<?php echo url::title( $category['name'] ) ?>/">View</a></td>
    </tr>
<?php endforeach; ?>

So a simple loop through the data won't work, i need to capture certain fields of the sql result Benim görüşüme.

Bu etrafında bir yolu var mı? Bu bana kirli hissettiriyor.

2 Cevap

Ben bunu hızlı ve kirli olması gerekir eğer böyle bilgileri kodlanmış olması kötü değil söyleyebilirim.

Ama db verilerinizi alır yöntemi ve sütunları kullanmak için hangi açıklayan bazı dizi görünümleri için jenerik sınıfına sahip düşünün. Sonra çocuklar sınıfları (UserView, PostView, WhateverTableNameView) size "Ad" içeren dizi, "Adres" vs ile bu temel yöntemi diyebiliriz

Python anlamsız konuşuyorum eğer pardon, ben fazla veya daha az, bu gibi PHP etiketinin ;) bu soru geldi

class BaseView {
   public function display(& $data, array $columnNames) {
      foreach($data as $row) {
         foreach($columnNames as $c) {
            echo $row->$c; // or $row[$c] or whatever your data is, I'm assuming objects
         }
      echo "\n";
   }
}

class UserView extends BaseView{
    public function display(& $data) {
        parent::display($data, array('Name', 'Address');
    }
}

Burada güzel şeyler:

  • Bir tane daha sütun gerekir? Emin bunun için sorgu yapmak, daha sonra UserView 1 satırı değiştirin.
  • HTML sütun etiketlerinin ( şeyler) için metin olması gerekir - bu zaten burada.
  • $ Veri değil merdivenler tam hafıza dizisi bir çok işgal ve başka bir işlevi etrafında geçmek zaman alabilir (($ rs.nextRow ()) iken düşünüyorum) kaynak tanımlayıcı olabilir.
  • Bu kayıtlar çevresindeki güzel görünümlü HTML tabloları için giderseniz, göz ve birleşik var Bunları tanımlamak tek bir yer var gibi uygulama arasında hissediyorum.

Nedense bu size hitap etmiyorsa, gerçekten genel çözüm dizinleri yerine sütun isimlerini sahip olmaktır. $ Veri [$ i] [0], $ veri [$ i] [1] ve böylece ... Çoğu veritabanı API'leri numaraları veya ikisi olarak, adları gibi sütunlar için sorgulamak imkanı sunuyoruz. PHP + MySQL http://www.php.net/manual/en/function.mysql-fetch-array.php ile ilgili örnekler görmek için

Eğer metadata bilgileri kaybedersiniz çünkü Ama bu bir $ $ er ya da geç sizi ısıracak. Kullanıcının daha sonra bağlantı halinde "adları" sarmak istediğinizi varsayalım:

echo '<a href="user/',$record['id'],'">',$record['name'],'</a>';

Sütun adları olmadan yeniden şekilde bu yaptığını iyi şanslar ...

Alıcılar / ayarlayıcıları ve onlara kayıt alanları eşleştirmek için bir kod parçası ile bu kaldırabilirsiniz, ancak bazı karmaşıklığı ekleyeceğiz.

Asıl soru: i hiç alan adlarını yeniden adlandırmak gerekir mi?

Bazı planlama / düşünme / feedback sayesinde uygulamaların ömür boyu hayatta sizin alanlar için uygun bir ad bulmak zor olmamalıdır. Ancak, alan değişikliği semantik yeni bir alan eklemek gerekir eğer. Bu da açıkça bunun itirazın belgelemek ve yeni birine programcı yol açabilir avantajına sahiptir.