Domanda

Ho un problema che non riesco a capire.

Sto costruendo un piccolo framework (pratica) e ora sto costruendo la libreria Validator. tutto funziona alla grande, tranne quando provo a risolvere il "callback" regola. La regola di callback viene utilizzata quando lo sviluppatore deve utilizzare una regola che non esiste nella libreria Validator.

Ecco come lo sto facendo.

Nel controller:

$this->validator->check('req|callback:test', 

Ho un problema che non riesco a capire.

Sto costruendo un piccolo framework (pratica) e ora sto costruendo la libreria Validator. tutto funziona alla grande, tranne quando provo a risolvere il "callback" regola. La regola di callback viene utilizzata quando lo sviluppatore deve utilizzare una regola che non esiste nella libreria Validator.

Ecco come lo sto facendo.

Nel controller:

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='') {

}

Classe di convalida:

UserController::test();

Il mio problema è che, come posso usare " corrente " controller. Ad esempio, in questo caso devo trovare:

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

Posso trovare il metodo giusto in $ key ma è un modo semplice per capire quale controller sta funzionando?

Ho provato a usare l'URL come:

<*>

Ma non ha funzionato affatto. Qualche idea?

POST['module_name'], 'Module Name');

Classe di convalida:

<*>

Il mio problema è che, come posso usare " corrente " controller. Ad esempio, in questo caso devo trovare:

<*>

Posso trovare il metodo giusto in $ key ma è un modo semplice per capire quale controller sta funzionando?

Ho provato a usare l'URL come:

<*>

Ma non ha funzionato affatto. Qualche idea?

È stato utile?

Soluzione

Alcuni modi diversi per affrontarlo.

Per prima cosa, suppongo che da qualche parte tu abbia del codice che trasforma un URI

example.com/foo

in un nome classe controller

class FooController

Questo è generalmente chiamato " routing " ;. In tal caso, esponi in qualche modo la classe / il metodo del tuo router al validatore e / o all'intero sistema. Ciò ti consentirà, in qualsiasi momento, di ottenere il nome di un controller dall'URI.

In secondo luogo, quando si crea un'istanza del validatore, fornire un riferimento all'oggetto controller per la richiesta specifica. Quindi è solo una semplice chiamata a get_class_name o all'API di riflessione.

In terzo luogo, è necessario che il controller sia passato insieme alla chiamata al metodo check .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top