Regex au changement paramètre d'appel de méthode
Question
regexs me faire pleurer, donc, je suis venu ici pour aider.
Je cherche quelques conseils sur Rechercher et remplacer Coda Panic . Je sais que le F & R est assez avance, mais je suis à la recherche de la meilleure façon de le faire. Je suis en train de réécrire un « moteur de template » (très basique) Je passe une webapp Je codage en PHP (CodeIgniter).
À l'heure actuelle, je vous appelle mon modèle comme ceci:
$this->load->view('subviews/template/headerview');
$this->load->view('subviews/template/menuview');
$this->load->view('subviews/template/sidebar');
$this->load->view('The-View-I-Want-To-Load'); // This is the important line
$this->load->view('subviews/template/footerview');
Cependant, il est inefficace en utilisant cinq lignes de code à chaque fois que je veux charger une autre page, dans tous les différents contrôleur. Donc, je réécrite comme ceci:
$data['view'] = 'The-View-I-Want-To-Load';
$this->load->view('template',$data);
De cette façon, si je dois apporter des changements majeurs à la conception, il peut facilement être fait à partir du fichier de vue template.php (qui contient l'en-tête, menu, vue sur la barre latérale, etc., etc.).
Cependant, j'utilise les 5 lignes précédentes dans tous les sens dans de nombreux différents contrôleurs et fonctions. Donc, ma question est --- Comment puis-je trouver et remplacer l'ancien moteur de template (5 lignes de code) pour la nouvelle un - substituant au nom de la vue dans l'important, unique ligne pour celui de $ data [ 'vue]?
Est-ce que de sens ?! Sinon, je vais essayer de rephrase! Je veux dire, est-il un moyen de le faire via une expression régulière ou quelque chose? Ou suis-je sur complètement les mauvaises lignes ici?
La solution
votre regex ressemblera à quelque chose comme ceci:
\$this->load->view\('subviews/template/headerview'\);\n\$this->load->view\('subviews/template/menuview'\);\n\$this->load->view\('subviews/template/sidebar'\);\n\$this->load->view\('([^']*)'\);\n\$this->load->view\('subviews/template/footerview'\);
et le remplacer par
\$data['view'] = '$1';\n\$this->load->view('template',\$data);