CakePHP için MeioUpload davranış kodu anlamak için çalışılıyor

2 Cevap php

Eminim ne yaptığını anlamak için MeioUpload için kaynak kodu ile okuyordu, ve çoğunlukla kod anlamak oldukça kolaydır. Ancak, ben sadece anlamaya gibi olamaz, ve ben sadece bir şey eksik yaşıyorum bu yüzden yazarın kısmında bir hata olup olmadığını belirlemek için çalışıyor ya ben kod bölümünde üzerine geldi.

Esasen, bu işlev varsayılan bir görüntünün dosya geçirilir, ve ayrılmış sözcükler listesine bu dosya ekler (ve bunun için bir yedek dize oluşturur). Ben anlamaya olamaz kod satırının yanındaki (yorumlarda) bir ok ve soru işaretleri koyduk:

/**
 * Include a pattern of reserved word based on a filename, 
 * and it's replacement.
 * @author Vinicius Mendes
 * @return null
 * @param $default String
 */
function _includeDefaultReplacement($default){
	$replacements = $this->replacements;
	list($newPattern, $ext) = $this->splitFilenameAndExt($default);
	if(!in_array($newPattern, $this->patterns)){
		$this->patterns[] = $newPattern;
		$newReplacement = $newPattern;
		if(isset($newReplacement[1])){ // <--- ???
			if($newReplacement[1] != '_'){
				$newReplacement[1] = '_';
			} else {
				$newReplacement[1] = 'a';
			}
		} elseif($newReplacement != '_') {
			$newReplacement = '_';
		} else {
			$newReplacement = 'a';
		}
		$this->replacements[] = $newReplacement;
	}
}

Anladığım kadarıyla, $ newReplacement her zaman bir dize değil, bir dizi olmalıdır. Sonuçta bu işlevinden döndürülen dizinin ilk elemanı onun değerini alır olmasıdır:

function splitFilenameAndExt($filename){
	$parts = explode('.',$filename);
	$ext = $parts[count($parts)-1];
	unset($parts[count($parts)-1]);
	$filename = implode('.',$parts);
	return array($filename,$ext);
}

If () deyimi bana hiç mantıklı böylece. Bu meydana asla bir durumu yakalamak için çalışıyor gibi görünüyor. Ya da ben yanlış ve o kod bölümünde bir amaca hizmet ediyor?

2 Cevap

Peki, ben neden bunu yapıyor arkasındaki gerçek muhakeme edemez, ama böyle bir dize değeri belirli bir dizin kullanmak zaman, dize belirli bir karakteri erişiyor. İşte bu dosya daha sonra birlikte ya '_' veya 'a' yerine ikinci bir karakter olup olmadığını kontrol ediyor, olduğunu. Dosya adı, yalnızca bir karakter uzunluğunda ise, '_' veya 'a' ile ya her şeyi değiştirir.

Ben isterseniz bu işlevi ne daha ayrıntılı açıklayabilir, ama gerçekten başarmak için çalışıyoruz ne herhangi bir anlayış yok.

Chad Birch zaten, ama sadece diğerleri durumda (benim özgün konfüzyon $var[n] n bir dize th karakter. Bulmak için kullanılabileceğini anlamadan kaynaklanmaktadır) sorumu yanıtladı merak, burada bu işlevleri gerçekleştirmek için çalışıyoruz ne bir açıklama var:

MeioUpload CakePHP'de için bir dosya / resim yükleme davranıştır. Bunu kullanarak, bir yükleme alanı olarak davranmaya modeli herhangi bir alanını, gibi pek yapabilirsiniz:

var $actsAs = array(
	'MeioUpload' => array(
		'picture' => array(
			'dir' => 'img{DS}{model}{DS}{field}',
			'create_directory' => true,
			'allowed_mime' => array('image/jpeg', 'image/pjpeg', 'image/png'),
			'allowed_ext' => array('.jpg', '.jpeg', '.png'),
			'thumbsizes' => array(
				'normal' => array('width'=>180, 'height'=>180),
				'small' => array('width'=>72, 'height'=>72)
			),
			'default' => 'default.png'
		)
	)
);

Yukarıdaki örnekte, MeioUpload bir yükleme alanı olarak "resim" adlı alanını tedavi edecek. Yükleme dizini olurdu Bu model "/img/product/picture/." ", product" adlı olur Yukarıdaki yapılandırmalar da 2 tanesinden elde gerektiğini belirtin. Ben "foo.png" adında bir resim yüklemek için eğer öyleyse, aşağıdaki dosyalar sunucu üzerinde kaydedilmiş olacaktır:

/img/product/picture/foo.png
/img/product/picture/thumb.foo.png *
/img/product/picture/thumb.small.foo.png

* - thumbsizes labeled 'normal' do not have their key appended to their filenames

Ayrıca, varsayılan görüntüleri de aynı dizinde depolanır:

/img/product/picture/default.png
/img/product/picture/thumb.default.png
/img/product/picture/thumb.small.default.png

Biz kullanıcı tarafından yüklenen görüntüler, varsayılan görüntüleri, veya otomatik oluşturulan küçük birbirini üzerine yazmak istemiyorum çünkü Ama, yazar dizilerin aşağıdaki çift yarattı:

var $patterns = array(
	"thumb",
	"default"
);

var $replacements = array(
	"t_umb",
	"d_fault"
);

Yüklenen dosyaları kaydederken dosya adı çakışmalarını önlemek için kullanılan hangi:

$filename = str_replace($this->patterns,$this->replacements,$filename);

_includeDefaultReplacement() varsayılan görüntü başka bir şey isimlendirildiği zaman yeni ayrılmış kelimeler eklemek için kullanılır.