PHP çerçeveler kamu yöntemleri vs aksiyon-yöntemleri

5 Cevap php

Zend Framework en az bir eylem yöntemi, adı "Eylem" ile biten bir yöntem içermelidir sözde eylem denetleyicileri var orada sizin bildiği gibi çok orada PHP çerçeveler bol, ve ben bu konuda düşüncelerinizi ilgileniyorum . Örneğin:

public function indexAction() {}

Kelime "Eylem" o olmadan URI üzerinden doğrudan yöntemi erişemez, önemlidir. Ancak, Kohana gibi diğer bazı çerçeveler içinde kamu yöntemleri değildir erişilebilir ve özel kamu ve özel yöntemleri var. Yani benim soru daha iyi bir yaklaşım olduğu sizce nedir? Görünümünde bir güvenli noktadan itibaren ben zerdüştlerin yaklaşımını oy vereceğini, ama ben başkalarının ne düşündüğünü bilmek ilgileniyorum.

5 Cevap

Tercihinize göre ben Zend Framework yaklaşımı ile iyi değilim. Bu doğru kontrol kapsülleme sahiptir. Evet kelime eylemi eklemek ve URL üzerinden erişmek için bir görünüm komut dosyası (isteğe bağlı) oluşturmanız gerekir. Ama sen yine de ek mantık denetleyici içinde, özel korumalı ve kamu işlevlerini kullanabilirsiniz.

Gerçekten tercihi var. Yararlı olabilir eylemler değil, kamu yöntemleri sağlar beri adlandırma kuralını çeşit kullanarak, daha çok yönlü olduğunu (ve bu Kohana 3 şimdi ne aslında).

Tabii ki, ideal bir çözüm .NET's attributes veya Java's annotations gibi bir kod meta çeşit kullanmak için, ama ne yazık ki bu özellik PHP yok.

Bu ZF tasarımı ile ilgisi var daha güvenliği ile ilgili daha az. Dediğin gibi, bir URL üzerinden çağrıldığında yöntemleri erişilebilir değil, ama bu Zend Framework isteklerini işler nasıl sadece kaynaklanmaktadır.

Alıntı reference guide:

En akışı Zend_Controller oldukça basittir. Bir istek dönüş aramalar Zend_Controller_Router_Rewrite göndermek için (yani denetleyici ve eylem) hangi denetleyicisi belirlemek için, hangi Zend_Controller_Front tarafından alınır.

Zend_Controller_Router_Rewrite URI isteği denetleyici ve eylem adları ayarlamak için parçalanır. Zend_Controller_Front daha sonra gönderme döngüye girer. Bu istekte belirtilen denetleyicisi ve eyleme sevk (veya varsayılan kullanın), o isteğini geçirmeden, Zend_Controller_Dispatcher_Standard çağırır.

Yöntem adları biçimlendirilmiş olsun Zend_Controller_Dispatcher_Abstract :

/**
 * Formats a string into an action name.  This is used to take a raw
 * action name, such as one that would be stored inside a Zend_Controller_Request_Abstract
 * object, and reformat into a proper method name that would be found
 * inside a class extending Zend_Controller_Action.
 *
 * @param string $unformatted
 * @return string
 */
public function formatActionName($unformatted)
{
    $formatted = $this->_formatName($unformatted, true);
    return strtolower(substr($formatted, 0, 1)) . substr($formatted, 1) . 'Action';
}

Eylem eki kodlanmış, bu yüzden Dispatcher her ne olursa olsun, bir eylem yöntemi arayacaktır. Eğer /user/show/ istemek Yani, sen UserController::showAction(), çünkü istek işlenir nasıl derim. Bu olsa bir güvenlik özelliğidir ya Görünürlük için bir yedek değil. showAction() korumalı ve artık ya bir URL üzerinden erişebilir olun. Ya düzenli kurulumu ile onları yok ve eğer teknik olarak, size çok bir URI olmayan eylem yöntemlerini diyebiliriz. Kendi Dispatcher oluşturmak ve ZF kolayca eylem adlarını biçimlendirir nasıl değiştirebilir.

Eylem Ekinin hakkında güzel ne, bu denetleyicisi diğer yöntemlerden eylem yöntemlerini açıkça ayırt yapar.

Zend çünkü PHP 4 de özel / kamu yoktu bu var, bu yüzden adlandırma güvenmek zorunda. Bu kamu / özel ve bir adlandırma kuralı gerçekten var hem daha güvenli.

Ben kişisel tercihinize aşağı söyleyebilirim. Bu örnek CodeIgniter'ın sürümü ile başlayan herhangi bir yöntem adı _ özel olduğunu ve başka bir şey bir denetleyicisi yöntemi olduğunu birçok varyasyonu var burada.

kişisel olarak, ben derim ki kullanılarak şey yerleşik dil kontroller (örneğin public function private function vs) en sezgisel olacaktır.

edit: frank dediği gibi, en güvenli yöntem (örneğin, private yanı sıra yöntem adı) mümkün olduğunca çok özellikleri kullanarak bir olacaktır.