2013-02-27 3 views
4

J'ai un formulaire dans lequel un utilisateur sélectionne un document. Ce document est ensuite enregistré dans le dossier webroot par le contrôleur.Créer un formulaire sans relation avec un modèle dans cakePHP

Cependant, avant qu'elle ne montre même la forme, il me donne une erreur:

Missing Database Table 
Error: Table office_layouts for model OfficeLayout was not found in datasource default. 

Ce qui est correct, il n'y a pas de table de base de données pour office_layouts. Mais ce n'est pas nécessaire. C'est pourquoi il n'y a pas de table. Le formulaire est simplement téléchargé sur le serveur.

J'ai lu à travers des formes en créant, et ont essayé ce qui suit:

// file: View/OfficeLayout/upload.ctp 
echo $this->Form->create(null ,array('type' => 'file')); ?> 
<fieldset> 
    <legend><?php echo __('&emsp;Add Layout for ' . $branch); ?></legend> 
    <?php 
     echo $this->Form->input('layout',array('type'=>'file')); 
    ?> 
</fieldset> 
<?php echo $this->Form->end(__('Submit')); ?> 

En plus chaning le null au nom du contrôleur (dans ce cas OfficeLayout). Je l'ai également supprimé tous les paramètres (thus creating it like so: $this->Form->create())

Dans mon contrôleur, je donne les résultats suivants:

public function upload($branch = null) { 
    $this->set('branch',$branch); 
    if(isset($this->request->data['OfficeLayout'])) { 
     $file = $this->request->data['OfficeLayout']['layout']; 
     if($file['error'] === UPLOAD_ERR_OK && move_uploaded_file($file['tmp_name'],APP . 'docs' . DS . 'layouts' . DS . $branch . '.pdf')) { 
      $this->Session->setFlash('New layout successfully uploaded.','default',array('class'=>'notification')); 
      $this->redirect(array('action'=>$branch)); 
     } else { 
      $this->Session->setFlash('Error uploading layout. Please contact web admin.','default',array('class'=>'error')); 
     } 
    } 
} 

de cette action être appelée avec: domain/office_layouts/upload/branch.

Chaque fois que je supprime la ligne $this->Form->create(), elle affiche la vue de téléchargement, mais elle n'est évidemment pas soumise.

Donc, ma question dans ce cas est, comment puis-je créer un formulaire, sans chercher une table dans la base de données?

Répondre

12

Au lieu de null, utilisez false:

echo $this->Form->create(false, array('type' => 'file')); ?> 
+0

Ah, c'est génial! :RÉ – Albert

0

fixe en créant un fichier de modèle et juste mettre ce là:

class OfficeLayout extends AppModel { 
    var $useTable = false; 
} 
+0

Il n'y a pas besoin de créer un modèle vide. Utilisez juste faux lors de la création du formulaire. Plus simple :) J'ai ajouté une réponse. – Alvaro

Questions connexes