Suite du tutoriel sur la création des relations entre entités pour leur persistance en base de données avec Doctrine.
Pour les précédent tutoriels :
Dans cette partie nous traiterons de la relation ManyToMany.
Suite du tutoriel sur la création des relations entre entités pour leur persistance en base de données avec Doctrine.
Pour les précédent tutoriels :
Dans cette partie nous traiterons de la relation ManyToMany.
Suite du tutoriel sur la création des relations entre entités pour leur persistance en base de données avec Doctrine.
Pour les précédent tutoriels :
Dans cette partie nous traiterons de OneToMany et sa réciproque ManyToOne
Une région possède zéro ou plusieurs départements.
Un département appartient à une et une seul région. Continuer la lecture
Ce tutoriel ce veut simplisme. On va juste voir comment lire un fichier Excel afin de le représenter au format HTML.
Pour cela on va utiliser la librairie PHPExcel de CodePlex.
Contrairement au tutoriel précédent, cette librairie est maintenue et ne pose pas de problème d’encodage.
La librairie est bien documentée et un grand nombre d’exemples sont fournis et elle est utilisée dans PhpMyAdmin.
require_once '.Classes/PHPExcel/IOFactory.php';
// Chargement du fichier Excel
$objPHPExcel = PHPExcel_IOFactory::load("unFichierExcel.xls");
/**
* récupération de la première feuille du fichier Excel
* @var PHPExcel_Worksheet $sheet
*/
$sheet = $objPHPExcel->getSheet(0);
echo '<table border="1">';
// On boucle sur les lignes
foreach($sheet->getRowIterator() as $row) {
echo '<tr>';
// On boucle sur les cellule de la ligne
foreach ($row->getCellIterator() as $cell) {
echo '<td>';
print_r($cell->getValue());
echo '</td>';
}
echo '</tr>';
}
echo '</table>';
Voila. C’est tout. Rien de compliqué.
Par contre si vous voulez aller plus loin, la librairie regorge de fonctionnalités pour la lecture et l’écriture de fichier. Et elle ne se contente pas du format xls elle prend aussi en charge le xlsx d’Excel 2007.
Petit tutoriel sur le mappage des entités (que l’on appel Entity) avec doctrine et son système d’annotation.
On ne verra que quatre types de relation (je ne sais même pas s’il y en existe d’autre) :
Et pour que le choses soit un peu plus graphique et compréhensible, je vous met un exemple pour chaque avec le code SQL des tables créés, les classes PHP en découlant et un schéma Merise basique.
Pourquoi Merise ? Alors qu’il faudrait lui préférer l’UML qui est quand même plus approprié pour les constructions de base de données objets. Simplement parce que les habitudes ont la vie dure et que l’on va encore manger du Merise pendant un grand nombre d’années. Continuer la lecture
La documentation de Symfony 2 est assez claire sur la personnalisation des pages d’erreur avec Twig : http://symfony.com/doc/current/cookbook/controller/error_pages.html
Le petit apport que je voudrais faire par rapport à la documentation concerne l’affichage de la page de débogage original de Symfony.
Il serait bien que les nouvelles pages d’erreurs aient deux comportements en fonction de l’environnement d’exécution de l’application.
Un pour l’environnement de production (Votre template à vous), et un autre pour l’environnement de développement. Dans ce second cas, on aimerais avoir la page de débug original de Symfony, qui sera bien plus explicite que la page d’erreur que l’on réserve à nos futurs utilisateurs.
Pour palier à cela, il suffit d’ajouter ce code dans votre template twig.
{% if app.environment == 'dev' %}
{% render 'TwigBundle:Exception:show' with{'exception':exception, 'logger':logger, 'format':format} %}
{% else %}
ICI Votre template d'erreur personalisé
{% endif %}
En gros, si vous êtes en environnement de développement, c’est la page de débug original qui est utilisé et non celle que vous avez définit.
Petit how-to pour installer Mercurial sur un poste Windows et pouvoir l’utiliser avec une connexion ssh (si ça c’est pas du sadisme pur).
Ce tutoriel est réalisé dans le cadre d’une connexion d’un poste Windows (XP/Seven) à un serveur Debian où est installé un dépôt Mercurial.
Dans un premier temps il faut télécharger ces petits programmes :
ssh = "C:\Program Files\TortoiseHg\TortoisePlink.exe" -ssh -2 -i "C:\Program Files\Mercurial\mercurial.ppk"
C’est finit !
Pour paramétrer Ecplise, c’est comme d’habitude :
1. Aller dans « Help » puis « Eclipse marketpalce… »
2. Rechercher « mercurial » et sélectionner « MercurialEclipse (was HGEclipse) »
3. L’installer
4. Le paramétrer
Rapel : Le système de DataFixture proposé par Doctrine dans le framework Symfony2 offre la possibilité de créer des tâches initialisant le contenue d’une base de données. Cela permet lors du développement de recouvrer une base de données opérationnel en un minimum de temps et d’effort. Personnellement je m’en sert aussi pour initialiser une base de données destiné à passer sur un serveur de production.
Symfony 2 ne dispose pas de système de DataFixture contrairement à la version 1.x du framework. Il est cependant possible d’ajouter cette fonctionnalité (suivez le lien).
Fin du rappel !
A mon goût il manque une chose dans le système de DataFixture proposer. Comme la possibilité de connaître le type d’environnement dans le quel il s’exécute (dev, prod, …).
Il peut être utile d’avoir cette information si l’on veux différencier deux types de traitement dans une même classe. Dans un environnement de développement je zap certaine insertion en base de données et j’en ajoute d’autre afin d’avoir du contenue à traiter (tambouille perso !).
Donc voici un petit script a ajouter dans chaque classe où il y en a besoin. Ce script ne fonctionne que si le DataFixture a été lancé en ligne de commande :
$:php app/console doctrine:fixtures:load
le script :
$env = "dev";
if($_SERVER['argv']) {
reset($_SERVER['argv']);
while(next($_SERVER['argv'])) {
if(current($_SERVER['argv']) == '--env') {
$env = next($_SERVER['argv']);
}
}
}
Suite à l’installation du dernier Firefox sur Ubuntu, les icônes de dossier associées aux marques pages avaient disparut. Après une courte recherche, voilà ce que j’ai trouvé.
Effectivement ça fonctionne, et avec ça j’ai même les icônes de tout les menus des différents logiciels qui sont apparut!
La méthodes à suivre :
[alt+F2]
saisir : gconf-editor
dans la fenêtre qui s’ouvre cocher la case :
/desktop/gnome/inerface/menu_have_icons
Il est possible que durant votre développement avec le framework Symfony 2 (version BETA 5 à l’heure où j’écris) vous ayez besoin d’accéder à vos Entities depuis vos tests unitaires.
Il n’a pas été facile de trouver le moyen de communiquer avec Doctrine depuis ces foutus test unitaire ! C’est pour cela que je vous livre mon code, enfin celui d’un test unitaire.
Donc cette classe montre comment accéder a l’ORM de doctrine depuis une classe de test unitaire qui va donc, normalement, être exécuté avec PHPUnit !
namespace Waldo\ModelBundle\Tests\DataFixtures;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; // Très important, c'est grâce à lui que l'on peut utiliser la méthode "$this->getKernelClass()"
class DataFixturesTest extends WebTestCase {
public function __construct() {
$kernelNameClass = $this->getKernelClass(); // Récupération du nom de la classe qui sert de kernel
$kernel = new $kernelNameClass('test', true); // Instanciation de la classe et exécution du kernel dans un environnement de test avec débogage
$kernel->boot(); // On boot le kernel (comme un pc ^^)
$this->em = $kernel->getContainer()->get('doctrine.orm.entity_manager'); // On récupère entity manager
}
public function testPurgeData() {
//...
// On peut maintenant appeler les méthodes de l'ORM de Doctrine
$query = $this->em->getConnection()->query('SELECT * FROM UNE_SUBLIME_TABLE');
$this->assertEmpty($query->fetchAll());
}
}
Petit truc pour faire des redirection permanente d’un domaine vers un autre sans conserver les paramètres qui se trouverais dans l’url, grâce à un fichier .htaccess .
RewriteEngine on RewriteRule ^.*$ http://www.addresse-vers-laquelle-rediriger.com/? [R=301,L]
En gros une redirection de www.vieux-site.com vers www.nouveau-site.com :
www.vieux-site.com/mabellepage.html => www.nouveau-site.com
www.vieux-site.com/?param=1¶m=2 => www.nouveau-site.com