Geçerli Controller Load yöntemi

1 Cevap php

Ben çözemedim bir sorun var.

Ben küçük bir çerçeve (uygulama) inşa ediyorum ve şimdi Validator kütüphane inşa ediyorum. her şey "geri" kuralı düzeltmek için çalışırken dışında mükemmel çalışır. Dev Validator lib var olmayan bir kural kullanmak gerektiğinde geri çağırma kuralı kullanılır ..

İşte ben bunu yapıyorum nasıl.

Denetleyicisi:

$this->validator->check('req|callback:test', $_POST['module_name'], 'Module Name');

Validator Sınıf:

public function check($rules, $input, $fieldname='') {
    $rule = explode('|', $rules);
    foreach ($rule as $r) {
        $request = explode(":",$r,2);
        $method = array_shift($request);
        $parameter = $request;
        array_unshift($parameter,$input);   
        array_push($parameter,$fieldname);
        if (method_exists($this, $method)) {
            call_user_func_array(array($this,$method), $parameter);
        }
  }

protected function callback($input, $key, $fieldname='') {

}

Benim sorun nasıl "geçerli" denetleyicisi kullanabilirsiniz olmasıdır. Örneğin, bu durumda ben bulmak gerekir:

UserController::test();

Ben $ anahtarında doğru yöntemi bulabilirsiniz ama yuvarlanan wich denetleyicisi anlamaya basit bir yolu var mı?

Ben gibi url kullanmaya çalıştı:

$controller = ucfirst($uri->uri[1]).'Controller';
$controller::$key();

Ama .. tüm Herhangi bir fikir işe yaramadı?

1 Cevap

Bu yaklaşım için birkaç farklı yolu.

Öncelikle, ben bir yerde bir URI döner bazı kod olduğunu varsayalım

example.com/foo

Bir denetleyici classname içine

class FooController

Bu genellikle "yönlendirme" olarak adlandırılır. Eğer öyleyse, bir şekilde onaylayıcısı ve / veya tüm sistemin yönlendirici sınıf / metodu ortaya. Bu her zaman, URI bir denetleyicisi adını almak, size izin verir.

Lütfen doğrulayıcı başlatmasını İkincisi, bunu belirli istek için kontrolör nesnesine bir başvuru verir. Sonra sadece get_class_name basit bir arama veya yansıma API bulunuyor.

Üçüncü olarak, kontrolör check yöntemine çağrı ile birlikte geçirilmesini gerektirir.