Bir mvc desen değişkene

7 Cevap php

Ben PHP MVC deseni uygun bir sistem inşa etmişlerdir. Kontrolörleri ve eylemler benim uygulamada adresler parçasıdır. Yani var:

www.example.com/controller/action/

Yani şimdi ben değişkenler geçmek için bir yol arıyorum. Formlar için sadece sonrası yöntemini kullanın, ama bazen sadece farklı bir sayfaya bağlantı ve sonra bazı değişkenlere aktarmak istiyorum.

Bunu yapmak için bazı önerileri istiyorum. Ben Zend Framework, bu gibi bir ayırıcı olarak "/" karakterini kullanarak denetleyicisi eylem sonrası anahtar / değer çiftleri olarak değişkenleri vardır biliyorum:

www.example.com/controller/action/var1/value1/var2/value2

Is this the best way? This is actually the only way I know it's done. I am looking for an easy but yet good way to implement it.

Herhangi bir öneri bekliyoruz.

7 Cevap

Ben size daha önce bahsedilen anahtar / değer Zend tarzı bir yaklaşım önlemek istiyorum. Sorun iki farklı URL'ler oluşturmak için önemsiz hale gelir

http://www.example.com/controller/action/var1/value1/var2/value2 
http://www.example.com/controller/action/var2/value2/var1/value1

Aynı kaynak noktası. Bu çalışır, web uygulamaları için MVC tarzı çerçeveler başarının bir parçası onlar daha kolay temiz bir URL yapısı sağlamak için, her kaynak ile sitenizde tek bir URL ilişkilendirmek olun. Var1/value1/var2/value2 yaklaşım anahtar / değer sorgu dizeleri biraz fazla avantaj sunuyor.

Burada alırdım yaklaşım anahtarları sakınmaktır, ve hemen hemen değerleri kullanın

http://www.example.com/example/list/value1/value2/value3

bir dizi olarak hareket yönteme geçirilen edilecektir

class example extends Controller{ 
	public function list($args){
		//$args[0] = 'value1';
		//$args[1] = 'value2';		
		//$args[2] = 'value3';				
	}
}

Daha temiz, daha kararlı, tek kaynak URL yol açan bir tasarıma teşvik ederken bu şekilde yaparak, onlar stil değişkenleri GET $ işlemek istiyorum nasıl karar için sistem son kullanıcılar için o kadar gidiyoruz.

Sen de bu yüzden gibi sorguları GET yapabilirsiniz:

www.site.com/controller/action?var1=value1&var2=value2

Bu $ _GET süper küreseli görünecektir.

Projenizin bağlı, aynı zamanda ayar ve PHP oturumları kullanarak değerleri okuma deneyebilirsiniz. Bu değerler komut GET veya POST değerler olarak komut geçirilen olmak zorunda değilsiniz. Bir aşağı tarafı (ya da yan yukarı) değişkenler sadece URL (veya yer imi) bir parçası olarak kabul edilemez olmasıdır.

Ne benim CakePHP projelerde kullanmak ister "adlı params" vardır. Aslında, benim URL'ler şöyle:

http://example.com/controller/action/param1:value1/param2:value2

Sen Cake's manual biraz daha fazla örnek görebilirsiniz. Ben framework bu destekler (veya Zend) bilmiyorum, ama fırıncılar yaptım, eğer can yapılabilir. :-)

CodeIgniter gibi çerçeveler Eğer değişken adını vermeden denetleyicisi değişkenleri geçmesine izin -

/controller/action/foo/bar/

işlenmiş olsun gibi:

function action( $id, $value){
  echo $id; // outputs 'foo'
  echo $value; // outputs 'bar'
}

http://codeigniter.com/user_guide/general/controllers.html

Bu sizin denetleyicisi kabul edecek kaç tane parametre kontrolünü sağlar, ve bazı değişkenlerin hiç kullanılmamış olması önemlidir ise, mantık yapmak veya uygun yönlendirme gibi ben beğendim.

var1/value1/var2/value2 gerçekten iyi yaklaşım ve kötüye kullanmakta MVC controller/action/id yapı değildir. Eğer tasarım yeniden düşünmeye POST veya sorgu params kullanmanız gerekir ya. Eğer varsa, büyük olasılıkla örneğin, tasarım kokan olabilir

/search/type/movie/format/divx/year/2000

Siz bu kokan olabilir

/movie/divx?year=2000

Yani movie kontrolör divx format film aramak istiyorum ve daha sonra belki de yıl == 2000 eşleşen sadece film göstermek için bir yardımcıya veya filtre ya da istemci tarafı komut dosyası kullanabilirsiniz.

Bir GET veya POST ya aracılığıyla değişkenler üzerinde geçen seçeneği var.

Oldukça formatında ya, URL değişkenleri ekleyecektir GET

 /controller/action/var1/value1/var2/value2

veya geleneksel yolu

 /controller/action/?var1=value1&var2=value2

Eski durumda, hala $ _REQUEST parçası olarak değişkenler sağ seti ile denetleyici / eylem URL ve rotadan değişkenleri ayıklamak için bir Apache yeniden yazma kuralı yazmak gerekir.

Eğer POST kullanarak ediyorsanız, değişkenler iletmekten bir yol olarak her form gizli değerleri ekleyebilirsiniz.

Eğer kamu bilgi olmak istemem değişkenler için, Sessions Onlara sunucu tarafında saklamak için kullanabilirsiniz.