Bonjour à tous,
Jusqu'il y a peu je codais en procédural et j'ai décidé de suivre la formation Grafikart "La POO en PHP" histoire de me mettre un peu à la page.
J'aimerais concevoir et utiliser des helpers comme on peut trouver dans différents framework mais je sèche...
Toutes mes recherches m'amènent sur la doc de Zend, Lavarel et autre... Et je ne suis pas encore prêt à sauter le pas sur l'utilisation de framework.
Je voudrais pouvoir utiliser notamment ce type de Helpers dans mon layout:
$this->BaseUrl();
$this->Meta('title', 'Mon Titre');
$this->Meta('description', 'Ma description');
Si éventuellement il y aurait une bonne âme pour m'aiguiller dans mes recherches, je lui en serai reconnaissant !
Merci beaucoup
Salut à toi !
tu es débutant dans la POO ? Pourquoi tu n'utiliserai pas un moteur de template pour faire ce que tu cherche apparemment à faire ?
Un helper est généralement un ensemble de méthodes qui te permettent de retourner ou définir une valeur, sans avoir à l'écrire à chaque fois, et surtout, si un jour, tu décides de modifier le retour, tu le feras à un seul endroit.
Ici, tu pourrais avoir une classe qui te retournerait l'url de ton application (information que tu pourrais récupérer depuis un fichier conf contenant des constantes), et qui pourrait définir les métas dans ton header (à appeller dans tes controlleurs et à injecter dans tes vues).
Tu as un exemple de helper ici :
https://www.grafikart.fr/tutoriels/php/creations-helpers-115
Bonjour Manuel,
Oui je suis plutôt débutant.
J'ai fait quelques sites (en procédural) dont 1 que je suis en train de refactorer en POO/MVC pour que ce soit plus propre (et aussi pour en profiter pour progresser en php).
Disons que les moteurs de template sont dans ma liste des choses à apprendre mais j'aimerai bien maîtriser un peu plus la POO avant de passer à autre chose (peut-être à tort... mais bon)
Merci Celionor.
J'ai vu ce tuto et je l'ai d'ailleurs appliqué pour créer mes formulaires.
Mais comment faire pour que les méthodes soit appelées automatiquement via la controlleur (le $this->method() si je ne suis pas complètement à côté de la plaque).
Je pourrais avoir la classe Meta par exemple, avec une méthode add() :
class Meta{
public function add($name, $value){
return '<meta name="{$name}" content="{$value}">';
}
}
Là où je bloque c'est comment faire pour faire appel à cette méthode directement depuis le contrôleur sans avoir à créer un objet Meta :
//ne pas faire ça :
$meta = new Meta;
$meta->add('description', 'ma description');
//mais ça :
$this->meta->add('description', 'ma description');
En espérant être clair...
Je pense que ça dépend ce que tu cherche à faire...
j'imagine que tu cherche à générer une page assez "simplement"
tu peux faire une classe qui va te permettre de faire :
$page = new Page("titre de la page");
echo $page->Meta("description", "ma description")
echo $page->body("<h1>Bienvenue</h1><p>Bienvenue sur la page.............</p>");
Avec un moteur de template comme twig tu va avoir une methode comme ca
// initialisation de twig
$twig->render("index.html", array("titre" => $titre, "description" => $description, "content" => $content) );
// la page index.html en twig
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="{{ descirption }}" />
<title>{{ titre }}</title>
</head>
<body>
{{ content }} // par sécurité le html n'est pas interprété mais la doc de twig te dis comment faire c'est super simple
</body>
</html>
Tu pourrais partir sur une méthode statique
Meta::add('description', 'ma description');
Ou sinon, dans ton constructeur parent, instancier ta classe, et le l'appeller dans tes fils.
abstract class Controllers
{
/**
* @var object App\Helpers\Meta
*/
protected $meta;
public function __construct()
{
$this->meta = new App\Helpers\Meta();
}
}
class Index extends Controllers
{
public function index()
{
$this->meta->add('description', 'ma description');
}
}