2010-11-05 13 views
1

J'ai une vue d'édition dont l'URL est/group/edit/1 où 1 est l'identifiant du groupe qui est dynamique.vues codeigniter avec paramètres dynamiques

Je validais les données de formulaire dans le contrôleur comme:

if ($this->form_validation->run() == FALSE) 
{ 
    $this->load->view('group/edit', $data); 
} 

Comment puis-je passer le paramètre id « 1 » à ce point de vue?

Ci-dessous option ne fonctionne pas depuis l'URL doit être un groupe/modifier/1

$this->load->view('edit', $data); 

Répondre

0

Est-ce que vous voulez dire?

$this->load->view('group/edit/'.$parameter, $data); 

qui en ferait charger votre 1, comme vous êtes tout simplement en train de définir le chemin du document VIEW

par CodeIgniters référence à c'est le format: $this->load->view('folder_name/file_name');

http://codeigniter.com/user_guide/general/views.html

Non Bien sûr, si vous êtes confus par le routage vs vues, voici une différence rapide:

Si vous voulez http://www.example/group/edit/10 alors vous avez besoin d'une configuration d'itinéraire, pas d'une vue.

Si vous voulez http://www.example/ et d'afficher le contenu de la page main.php (dans votre dossier de vues) alors vous faites $this->load->view('main'); à l'intérieur de votre contrôleur principal.

+0

Essayé. Ça ne marche pas. Je reçois ce message d'erreur: "Impossible de charger le fichier demandé: group/edit/10.php" – user361697

+0

J'ai essayé. Ça ne marche pas. Je reçois ce message d'erreur: "Impossible de charger le fichier demandé: group/edit/10.php" – user361697

+0

Avez-vous un fichier appelé 1.php dans le groupe de dossiers/modifier /? Si ce n'est pas votre problème.OU décrivez-vous un problème de «routage» et non un problème de «visualisation de fichier»? Vous pourriez confondre les deux. – Jakub

2

Vous pensez à ce problème. Vous voulez avoir une vue appelée edit.php et lui passer le numéro 1, ou peut-être plus au point, vous voulez obtenir les données pour 1 de votre modèle et transmettre la valeur de retour de votre modèle dans votre vue. Considérez ceci:

contrôleur

function edit($id) 
{ 
    $data['item_info'] = $this->whateverModel->getItem($id); 
    $this->load->view('edit', $data); 
} 

Ensuite, dans votre mode de modification, vous pouvez vous référer aux données comme ceci:

vue

echo $item_info['id']; 
echo $item_info['name']; //or whatever you pass back from the model 
+0

c'est une bonne idée, et s'il y a une erreur de validation sur enregistrer et je veux recharger le même éditer la vue avec l'id dans l'URL "group/edit/1"? rappelez-vous que j'utilise la page auto-submit to "group/edit" cette fois le $ id dans l'URL n'est pas présent et le contrôleur s'en plaint depuis $ id n'est plus valide dans "function edit ($ id)" et aussi après que cette URL change pour "group/edit" Une option que je pense est de se soumettre soi-même à "group/edit/1". – user361697

+0

Bien sûr, pourquoi pas? Vous pouvez avoir une certaine logique dans votre 'edit()' méthode qui vérifie si elle est actuellement au milieu d'une soumission de formulaire ou non.Alors vous pouvez ajuster la vue en conséquence. – treeface

0

C'est ce que je fais. Est-ce acceptable?

Action du contrôleur:

function edit($id) 
{ 
$group_q = $this->db->query("SELECT * FROM groups WHERE id = ?", array($id)); 
$group_data = $group_q->row(); 

    /* Form fields */ 
    $data['name'] = array(
     'name' => 'name', 
     'id' => 'name', 
     'value' => $group_data->name, 
    ); 
    $options = array("A", "B", "C", "D"); 
    $data['group_parent'] = $options; 
    $data['group_parent_status'] = $group_data->parent_id; 
    $data['group_id'] = $id; 

    /* Form validations */ 
    $this->form_validation->set_rules('name', 'Name', 'trim|required|min_length[2]'); 

    if ($this->form_validation->run() == FALSE) 
    { 
     if ($this->input->post('submit', TRUE)) 
     { 
      $data['name']['value'] = $this->input->post('name', TRUE); 
      $data['group_parent_status'] = $this->input->post('group_parent', TRUE); 
     } 
     $this->load->view('group/edit', $data); 
    } 
    else 
    { 
     $data_name = $this->input->post('name', TRUE); 
     $data_parent_id = $this->input->post('group_parent', TRUE); 
     $data_id = $id; 

     if (! $this->db->query("UPDATE groups SET name = ?, parent_id = ? WHERE id = ?", array($data_name, $data_parent_id, $data_id))) 
     { 
      $this->session->set_flashdata('error', "Error"); 
      $this->load->view('group/edit', $data); 
     } else { 
      $this->session->set_flashdata('message', "Success"); 
      redirect('account'); 
     } 
    } 
    return; 
} 

Voir fichier:

<?php 
echo form_open('group/edit/' . $group_id); /***** NOTE THIS STEP *****/ 
echo "<p>"; 
echo form_label('Name', 'name'); 
echo "<br />"; 
echo form_input($name); 
echo "</p>"; 
echo "<p>"; 
echo form_label('Parentp', 'group_parent'); 
echo "<br />"; 
echo form_dropdown('group_parent', $group_parent_active); 
echo "</p>"; 
echo form_hidden('group_id', $group_id); 
echo form_submit('submit', 'Submit'); 
echo form_close(); 

>

Questions connexes