CakePHP: a view helper gelen denetleyicisi veya modelini Erişme

3 Cevap php

Görüntüler için üreten küçük resimlerini yöneten bir görünüm yardımcım var. Görüntüler benzersiz bir kimliği kullanarak saklanan ve daha sonra veritabanı bir dosya kaynak bağlantılıdır.

Ben o kontrolör iş akışında herhangi başka bir noktada görüntü verilerini yüklemek mümkün olmadığından, doğrudan model veya denetleyicisi erişmeye bu görüntüleri üretir görünüm yardımcı için mümkün olup olmadığını öğrenmek için çalışıyorum.

Ben bu gerçekten kesmek biraz biliyorum, ama görünüm yukarıdaki tüm veri yönetimi yığınını yeniden çalışırken daha kolaydır.

3 Cevap

Eğer modeli veya denetleyicisi verileri ayarlamak olsaydı bunu erişebilir. Yani denetleyicisi öncesinde düşünmek gerekiyor. Eğer kontrolör bunu yükleyemiyor dediği gibi, belki de siz $ this-> requestAction () kullanarak görünümünden çağrı ve görüntü adını veya bir parametre olarak benzer iletebilirsiniz belirli bir kontrol fonksiyonu, yazmak gerekir.

Bu app biraz yavaşlatabilir tamamen yeni bir gönderme döngüsü başlatır gibi bu tek dezavantajı) (requestAction kullanarak, hoş karşılanmaz.

Dinamik bir öğe oluşturma ve eleman içine bir parametre geçiyor çalışmak ve sizin için görüntüyü oluşturmak olabilir diğer seçenek. Ben bu pratikte nasıl olacağı konusunda çok emin değilim ancak.

Nasıl bir kontrolör veya modelden içine geçen veri değilse görünümünde yardımcı kullanarak küçük üretmek mi? Ben bana olsaydı, ben görünümünde onunla yardımcı anlaşma olan, sonra denetleyicisi 'veritabanı kaynağını' ayarı ve görünümüne bu şekilde geçen olurdu demek. Tamamen bu sorunu aşmak verebilir yolu :)

$this->params['controller'] ne istediğiniz dönecektir.

Göre ... Eğer hata ayıklama bilgi işlemek için URL'yi açmak bir view.ctp dosyasında bu kodu koyabilirsiniz:

$cn = get_class($this);
$cm = get_class_methods($cn);
print_r($cm);
die();

Sen bir yardımcıya yazmak ve (statik işlev setcontroller inşa) ve parametre olarak içinde aracılığıyla başvuru geçmesi ve daha sonra yardımcı sınıfında statik değişkende saklamak olabilir:

class FancyHelper extends FormHelper {

static $controller;

    public static function setController($controller) {
    self::$controller = $controller;
    }

... more stuff
}

Sonra Controller sınıfından size FancyHelper sınıfını içe olabilir ve beforeFilter işlevi statik atama yapmak:

App::uses('FancyHelper', 'View/Helper');

class FancyController extends AppController {
public $helpers = array('Fancy');


    function beforeFilter() {
    FancyHelper::setController($this);
    }

... more stuff

}

Ve sonra self :: $ kumandayı kullanarak FancyHelper içindeki diğer kamu işlevleri erişim denetleyicisi olabilir.