2017-10-04 1 views
0

Codeigniter a une syntaxe pour le passage de paramètre url pour les fonctions à l'intérieur du contrôleur.Vérifier si une fonction est appelée avec des paramètres

Si une fonction par exemple:

function index($id){ 
    $this->model->get_user($id); 
} 

En supposant que cette fonction est appelée sans fournir l'ID soit appelé

ProjectName/Controller/index 

il renvoie une erreur car il attend un paramètre. Existe-t-il un moyen de vérifier si un paramètre existe.

Répondre

1

Non, il n'y a pas moyen de vérifier s'il en existe un par-dire car cette erreur se produit avant que le contrôleur ait une chance d'exécuter du code. c'est à dire. avant l'exécution de la méthode de classe.

Cela dit, il existe une solution simple pour ceci: Vous pouvez fournir une valeur par défaut et vérifier que, par exemple

function index($id = null){ 
    if(is_null($id)){ 
      ///do something - like show a pretty error, or redirect etc... 
    }else{ 
     $this->model->get_user($id); 
    } 
} 

De cette façon, quand aucun paramètre est fourni l'ID sera nulle, c'est assez sûr (lorsque vous utilisez null) parce que vous ne pouvez jamais fournir null dans le cadre du chemin d'URL même ce faisant

www.mysite.com/index/null //or however the url works out in your case 

fournira null comme une chaîne, parce que tout dans l'url vient à travers comme une chaîne. Donc 'null' comme une chaîne n'est pas en fait null c'est juste le mot null. Si ça a du sens. Donc, étant donné que null ne pourrait jamais être fourni et ne se produit que si aucune autre valeur n'est fournie.

Dans ce cas, il peut être utile de convertir l'entrée en int ou de vérifier si elle est incorrecte.

Cela pourrait se faire de plusieurs façons:

Avec:

function index($id = null){ 
    if(is_null($id)){ 
      ///do something - like show a pretty error, or redirect etc... 
    }else{ 
     $this->model->get_user((int)$id); 
     //cast to int, things that are not INT or string equivalents become 0, which should not find a user as it would look for ID = 0 
    } 
} 

Par chèque REGX:

function index($id = null){ 
    if(is_null($id)){ 
      ///do something - like show a pretty error, or redirect etc... 
    }else if(preg_match('/^[^\d]+$/', $id)){ 
     // not an int (contains anything other than a digit) 
    }else{ 
     $this->model->get_user($id); 
    } 
} 

Vive.

+0

Merci, cela semble génial. Je vais essayer cela et je vais vous informer sur comment cela va aller pour moi. – Audrick

+0

Bien sûr, c'était chose simple pour moi. – ArtisticPhoenix

+0

Il est également possible d'intercepter ces erreurs à l'aide d'un gestionnaire d'erreurs personnalisé, mais c'est beaucoup plus complexe et cela n'en vaut probablement pas la peine. Le seul avantage serait d'avoir moins de maintenance, car il est possible de le configurer une fois et de ne pas avoir à changer les méthodes du contrôleur. Voici la fonction PHP pour cela, mais vous devrez utiliser une expression régulière sur le fichier $ pour voir si c'est dans les contrôleurs http://php.net/manual/en/function.set-error-handler. php – ArtisticPhoenix