2012-08-27 33 views
6

REST'in temellerini öğrenmeye çalışıyorum ve oldukça iyi bir öğretici buldum (en azından temelleri anlamama yardımcı oldu). This is the tutorial I've been following.php ile REST'in Temelleri

Her neyse, bu kod parçacığında yazar, bir web sitesinin www.example.com/restaurant/42 instead of /?restaurant_ID=42 gibi bir şeyi nasıl kullanabileceğinin temellerini gösterir. Bu Bu örnek için

explode("/", $path, 2); 
instead of 
explode("/", $path); 

kullanılır aynı diziyi, ama ne Restaurant/item/3 gibi daha uzun bir yol olmadığını üretecek neden

Herkes açıklayabilir misiniz? Her şeyi ayırmak istemez miydin? Gördüğünüz gibi, bu blokta aşağı doğru bir limit tanımlamaksızın patlayabilirler. Kaynak için ilk olan mı? İlk bir kaynak ve parametreler değişkene tüm yolu bölme bulunuyor

<?php 
// assume autoloader available and configured 
$path = parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH); 
$path = trim($path, "/"); 
@list($resource, $params) = explode("/", $path, 2); //why is limit used here? 

$resource = ucfirst(strtolower($resource)); 
$method = strtolower($_SERVER["REQUEST_METHOD"]); 
$params = !empty($params) ? explode("/", $params) : array(); //no limit here? 

if (class_exists($resource)) { 
try { 
    $resource = new $resource($params); 
    $resource->{$method}(); 
} 
catch (Exception $e) { 
    header("HTTP/1.1 500 Internal Server Error"); 
} 
} 
else { 
header("HTTP/1.1 404 File Not Found"); 
} 

cevap

6

(bir MVC olsaydı denetleyicisi tahmin). $resource, ilk eleman olan $params'u içerir.

restaurant/42  -> restaurant, 42 
restaurant/item/3 -> restaurant, item/3 
foo/bar/baz/boom -> foo, bar/baz/boom 

Sonra $params dize ayrıca ürüne ayrılmıştır: Örneğin

restaurant/42  -> restaurant, (42) 
restaurant/item/3 -> restaurant, (item, 3) 
foo/bar/baz/boom -> foo, (bar, baz, boom) 

Esasen ilk bölümü özel davranıyor.

Bu işle aynı etkiyi alabilir:

$params = explode('/', $path); 
$resource = array_shift($params); 
+1

+1 Sadece açıkça orijinal kodu açıklayan fakat aynı ulaşma daha basit bir yol göstermek için. –

+0

Patlamanın ne yaptığını anlıyorum (nasıl ayrıldığına göre), sadece yolu sınırlamak yerine neden sınırlamak istediğinizi merak ediyorum (bir limit belirtmeden)? Bu örnekte, yalnızca 2 sınırıyla patlatıldığında kullanılan kaynağa mı ihtiyacımız var? Her iki durumda da, kaynağı almak için sadece $ dizi [0] arayamaz mıydık? Teşekkürler – user1104854

+2

@user Söylediğim gibi, * bunun için * daha kolay yollar vardır. Ancak kodunuzun yazarı bu şekilde de geçerlidir. Problemi farklı düşündü ve farklı bir yöntem kullanarak çözüme ulaştı. Ya da belki de o, yapmaya çalıştığı şeyin fikrini daha iyi iletir ve bu da kodu daha okunabilir hale getirir. Bunun için başka sebep yok. – deceze