J'ai écrit une simple fonction display_messages()
qui recherche dans Session::get('errors')
les données Flash et les renvoie à l'écran.
Où est-ce que je mets cette fonction? Dans Codeigniter, vous avez un dossier helpers où vous pouvez coller toutes vos petites méthodes d’aide globale.
Comme suggéré par Usman,
class Demo() {
à l'intérieur{{ Demo::display() }}
Fonctionne parce que les bibliothèques et les modèles sont automatiquement chargés dans la ligne 76 de start.php. Je pense que les noms de fichiers doivent correspondre à Classnames (note capital).
<?php
class Demo {
public static function display() {
if( !$message = Session::get('errors'))
$message = 'No Errors';
echo "<pre>print_r($message)</pre>";
}
}
Je n'arrive pas à comprendre pourquoi j'ai eu un problème avec le nom de classe Common, il peut y avoir un conflit (vous pouvez définir un espace de nom si cela est important) ...
Créez un dossier helpers
dans votre dossier d'application et créez un fichier application_helper.php
. Avec un tel code:
// app/helpers/application_helper.php
function display_messages()
{
exit('Yes');
}
Ensuite, ouvrez votre fichier composer.json à la racine. autoload app/helpers/application_helper.php
with composer files
.
"autoload": {
....
"files": [
"app/helpers/application_helper.php"
]
Terminé, vous pouvez maintenant appeler display_messages()
.
Certains autochargeurs peuvent vous demander d'exécuter la commande composer dump
pour la première fois.
Merci memeLab a fourni une réponse très utile qui m'a beaucoup aidé. Je voulais juste développer sa réponse car le dossier "libraries
" n'était pas un répertoire de chargement automatique, du moins pas dans la version/version actuelle de L4 que j'utilise. De plus, le fichier start.php semble avoir été développé pour devenir le dossier start
avec global.php
, local.php et artisan.php.
Donc, pour utiliser vos propres classes pour des bibliothèques séparées ou des helpers avec le chargeur automatique paresseux L4, il vous suffit d’inclure le dossier dans lequel vous souhaitez les stocker dans le global.php
. Par exemple, j'ai ajouté un dossier libraries
à la liste des répertoires.
ClassLoader::addDirectories(array(
app_path().'/commands',
app_path().'/controllers',
app_path().'/models',
app_path().'/database/seeds',
// this a custom path
app_path().'/libraries',
));
Quelle que soit la classe que vous définissez dans ce dossier en tant que classname.php
, elle peut être appelée via CLASSNAME::methodName($someVar);
dans vos contrôleurs.
class CLASSNAME {
public static function methodName($someVar=NULL) {
// whatever you want to do...
return $message;
}
}
Ainsi, de cette manière, vous pouvez créer une classe d'assistance et définir différentes méthodes à utiliser dans tous vos contrôleurs. Veillez également à définir les fonctions normales en dehors de votre classe de cette manière, car elles ne fonctionneront pas (car la classe n'est pas toujours chargée). (par exemple, someFunctionName($someVar);
au lieu de CLASSNAME::methodName($someVar);
) Si vous voulez créer des fonctions de cette manière, vous devez vous assurer que le fichier est chargé, mais je ne vais pas en dire plus à ce sujet, car il est préférable d’utiliser les classes de chargement paresseux pour de telles choses. chargez uniquement les classes dont vous avez vraiment besoin.
Merci encore à memeLab et Usman, je n’aurais pas pu aller aussi loin sans leurs réponses. :)
Créez app/libraries/class/Message.php
et ajoutez la classe dans le fichier
class Message {
public static function display() {
}
}
Ajouter "app/libraries/class"
à composer.json
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php",
"app/libraries/class"
]
},
Enfin, lancez composer dump-autoload
en ligne de commande.
Vous pouvez y accéder par Message::display()
Créer app/libraries/function/display_messages.php
et ajouter une fonction dans un fichier
function display_messages() {
}
ajouter une ligne dans start/global.php
require app_path().'/libraries/function/display_messages.php';
Vous pouvez y accéder simplement par display_messages()
Ajoutez ceci dans app/start/global.php
require app_path().'/config/autoload.php';
require app_path().'/start/loader.php';
App::instance('loader',new loader($autoload));
créez un nouveau fichier loader.php dans app/start et ajoutez:
class loader{
private $helpers = array();
public $autoload = array(
'helpers' => array()
);
function __construct($autoload = array()) {
if (!empty($autoload))
$this->autoload = $autoload;
foreach ($this->autoload as $key => $value)
{
$function = strtolower($key);
$this->$function($value);
}
}
function helpers($helpers=array())
{
if (!is_array($helpers))
$helpers = explode(",",$helpers);
foreach ($helpers as $key => $value) {
$this->helper($value);
}
}
function helper($helper = '',$path = '/')
{
$folder = app_path().'/helpers'.$path;
if (file_exists($folder.$helper.'.php') && !in_array($helper, $this->helpers)){
$this->helpers[] = $helper;
require $folder.$helper.'.php';
}
else{
$segments = explode('/',$helper);
if (is_dir($folder.$segments[0])){
array_shift($segments);
$this->helper($segments,$path.$segments[0].'/');
}
}
}
}
créez un nouveau fichier autoload.php dans app/config et ajoutez:
$autoload['helpers'] = array('functions'); // my autoload helpers!
créer un nouveau dossier assistants dans app /, ajouter vos fichiers d'assistance. (es. myhelper.php)
function myhelper()
{
echo 'helper';
}
dans votre contrôleur, ajoutez:
App::make('loader')->helper('myhelper');
myhelper();
J'ai utilisé ce tutoriel et je pense que c'est la méthode la plus simple: http://laravel-recipes.com/recipes/50/creating-a-helpers-file
Ensuite, chargez-le au bas de app\start\global.php comme suit.
// au bas du fichier require app_path (). '/ helpers.php';
Ou changez votre fichier composer.json et déchargez le chargeur automatique.
{
"autoload": {
"files": [
"app/helpers.php"
]
}
}
$ composer dump-auto
alors vous pouvez écrire vos fonctions dans helpers.php et les appeler de n'importe où
function myfunction($result){
return $result;
}
En L3, je créerais normalement un fichier application/libraries/helpers.php
et le require_once()
dans mon application/start.php
. Semblable à la façon dont L3 a un fichier laravel/helpers.php
.
Je suppose qu'il y a quelque chose de similaire que vous pouvez faire en L4.
EDIT: En regardant la source, app/start/local.php
semble être l’endroit idéal.