Question

Après tutoriel Dancer ici:

http://search.cpan.org/dist/Dancer/ lib / danseur / Tutorial.pod

J'utilise ma propre base de données sqlite3 avec ce schéma

CREATE TABLE if not exists location (location_code TEXT PRIMARY KEY, name TEXT, stations INTEGER);
CREATE TABLE if not exists session (id INTEGER PRIMARY KEY, date TEXT, sessions INTEGER, location_code TEXT, FOREIGN KEY(location_code) REFERENCES location(location_code));

Mon code de danseur (helloWorld.pm) pour la base de données:

package helloWorld;
use Dancer;
use DBI;
use File::Spec;
use File::Slurp;
use Template;

our $VERSION = '0.1';

set 'template' => 'template_toolkit';
set 'logger'   => 'console';

my $base_dir = qq(/home/automation/scripts/Area51/perl/dancer);

# database crap
sub connect_db {
 my $db = qw(/home/automation/scripts/Area51/perl/dancer/sessions.sqlite);
 my $dbh = DBI->connect("dbi:SQLite:dbname=$db", "", "",
   { RaiseError => 1, AutoCommit => 1 });
 return $dbh;
}

    sub init_db {
 my $db = connect_db();
 my $file = qq($base_dir/schema.sql);
 my $schema = read_file($file);
 $db->do($schema) or die $db->errstr;
    }

get '/' => sub {
 my $branch_code = qq(BPT);
 my $dbh = connect_db();
 my $sql = q(SELECT * FROM session);
 my $sth = $dbh->prepare($sql) or die $dbh->errstr;
 $sth->execute or die $dbh->errstr;
 my $key_field = q(id);
 template 'show_entries.tt', {
  'branch' => $branch_code,
  'data' => $sth->fetchall_hashref($key_field),
 };
};

init_db();
true;

J'ai essayé le modèle d'exemple sur le site, ne fonctionne pas.

<% FOREACH id IN data.keys.nsort %>
  <li>Date is: <% data.$id.sessions %> </li>
<% END %>

Produit la page mais sans données. Comment puis-je résoudre cela comme aucun indice trouver dans la console / cli?

* MISE À JOUR * Si je change le code de base de données à ceci:

get '/' => sub {
    my $branch_code = qq(BPT);
    my $dbh = connect_db();
    my $sql = 'SELECT * FROM session';
    #my $sth = $dbh->prepare($sql) or die $dbh->errstr;
    #$sth->execute or die $dbh->errstr;
    #my $key_field = q(id);
    my $entries = $dbh->selectall_arrayref($sql,{});
    template 'show_entries.tt', {


'branch' => $branch_code,
        #'data' => $sth->fetchall_hashref('id'),
        'data' => @$entries,
    };
};

J'obtenir un résultat de la table dans le modèle. Donc, l'information est passée, mais la syntaxe pour le modèle ne fonctionne pas comme décrit. Cela ne correspond avec la syntaxe Template Toolkit.

Merci

Bubnoff

EDIT / RESOLUTION **

David m'a rappelé Data :: Dumper qui a confirmé que le problème était en effet avec la configuration du modèle. Je commentais la directive modèle dans la pensée du fichier de configuration qu'il serait redondant car il était dans le code lui-même. FAUX!!! Il doit être configuré dans le YAML. La suppression d'un jeu dans le dièse de configuration tout les droits. Maintenant, je suis juste gêné de ne pas essayer Data :: Dumper en premier lieu. Merci David!

Était-ce utile?

La solution

Tout d'abord, assurez-vous que vous passez ce que vous pensez que vous êtes de passage au modèle.

Attribuer le résultat de $ sth-> fetchall_hashref ($ key_field) à un scalaire temporaire, puis vidage avec données :: Dump ou Data :: Dumper (ou voir Dancer :: Plugin :: DebugDump un moyen de le rendre mort facile).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top