Bonjour,

Je refais un sujet différent car j'ai un soucis d'autoloader

Déjà le voici :

class Autoloader{

    public static function registered(){
        spl_autoload_register([__CLASS__, 'autoload']);
    }

    private static function autoload($class){

        require __DIR__ . DIRECTORY_SEPARATOR .'myclass'.DIRECTORY_SEPARATOR. $class .'.php';

    }

}

Je l'ai fais moi même il fonctionne en tout cas pour mes class, mais j'utilise recaptchat par exemple qui ne veut pas s'inclure alors je sais que ça viens des namespace car il autoload tout.

Je me suis renseigner un peut mais après ça touche au psr etc... composer etc... mais je n'utilise pas les console command.

ma question c'est es-ce-que je peut utiliser l'autoloader de composer ou autre sans avoir a utiliser les consoles.

11 réponses


Kenor
Réponse acceptée

1- Tu as une option "classmap" pour "autoload" qui te permet de charger les fichiers de class issu d'un dossier ou d'un fichier directement : https://getcomposer.org/doc/04-schema.md#autoload

{
    "autoload": {
        "classmap": ["src/", "lib/", "Something.php"]
    }
}

2- en théorie du coup, avec la solution 1 (ou avec l'option "files", cf même lien) tu peux ajouter toute sorte de class non prévu pour. Même si, en soit, il y a des chances qu'elle soit dépassé si elle n'utilise pas composer.

Lartak
Réponse acceptée

Bonsoir.
Ta première notation est totalement incorrecte et la seconde est simplement incorrecte.
La syntaxe est par exemple :

{
    /...
    "autoload": {
        "psr-0": {
            /...
        },
        "psr-4": {
            "Namespace\\": "folder",
            "OtherNamespace\\": "otherFolder/folder"
        }
    }
}

Kenor t'a donné un lien, tu aurais quand même pu le suivre.
Par contre, psr-4, ce n'est pas pour faire joli, si par exemple ta classe ne respecte pas le standard psr-4, il est inutile de la définir à l'intérieur de celui-ci, autant que tu utilises les autoload classmap ou files dans ce cas là.
Pour savoir à quel standard correspond tes classes, tu as le site suivant qui peut t'y aider : PHP-FIG » PHP Standards Recommendations.

dernière question les library dans le dossier vendor il n'y a rien a faire elle s'autoload toute seul ?

Lorsque tu ajoutes manuellement des autoload dans ton composer.json, je te recommande de faire un composer dump-autoload pour que composer prenne bien les modifications/ajouts en compte.

Bonsoir.
Il t'est tout à fait possible d'utiliser l'autoloader de Composer, à la place de ta classe perso.
Mais ça n'empèche pas que tu devras quand même initialiser composer sur ton projet via les lignes de commandes au début.
Si tu ne l'as pas déja fait, je te recommande de suivre le tutoriel réalisé par Grafikart : Tutoriel Vidéo PHP » Composer.
Je te recommande d'ailleurs de l'utiliser, celà te facilitera l'utilisation et l'installation de librairies externes.

neecride
Auteur

Bonjour Lartak,

je suis désolé mais j'ai suivis la vidéo pour moi rien ne fonctione

C:\wamp\www>composer init

  Welcome to the Composer config generator

This command will guide you through creating your composer.json config.

Package name (<vendor>/<name>) [folder/www]:
Description []:
Author [moi <moi@fake.fake>, n to skip]:
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []: yes
License []:

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? yes
Search for a package: markdown

Found 15 packages matching markdown

   [0] erusev/parsedown
   [1] michelf/php-markdown
   [2] cebe/markdown
   [3] league/commonmark
   [4] league/html-to-markdown
   [5] knplabs/knp-markdown-bundle
   [6] graham-campbell/markdown
   [7] justinwalsh/daux.io
   [8] erusev/parsedown-extra
   [9] pixel418/markdownify
  [10] aptoma/twig-markdown
  [11] webuni/commonmark-table-extension
  [12] texy/texy
  [13] sonata-project/formatter-bundle
  [14] s9e/text-formatter

Enter package # to add, or the complete package name if it is not listed: 0
Enter the version constraint to require (or leave blank to use the latest version):
Using version ^1.6 for erusev/parsedown
Search for a package:

Il me demande toujours de mettre une version et quand ça passe il me dit qu'il trouve pas composer.json hors il n'est pas sencé le créer lui même.

mais la rien ne ce passe rien ne ce télécharge etc...

neecride
Auteur

Bonjour,

Voila après quelque soucis j'ai décider de le créer moi même ce composer.json maintenant il update et install facilement.

{

    "name": "neecride/cmsperso",
    "require" : {
        "michelf/php-markdown": "1.7.0",
        "erusev/parsedown": "1.6.4",
        "aidantwoods/secureparsedown": "1.0.1",
        "google/recaptcha": "1.1.3",
        "ezyang/htmlpurifier": "4.9.3"
    },
    "authors": [
        {
            "name": "neecride",
            "email": "neecride@gmail.com"
        }
    ],
    "autoload": {
        "psr-4" : {"App\\" : "App"}
    }

}

J'ai néanmoins 2 questions

1 - si je ne veut pas mettre de namespace a mes class je suis quand même obliger de mettre mon autoloader, sinon composer ne les charge pas, comment réglé ça ?

2 - HTMLpurifier ne s'autoload pas même avec composer rien vue dans leur doc, existe t-il un autre purifier ?

Pour ta première question, il est largement préférable que tu utilises les namespace.
As-tu suivi la formation sur la POO présente sur le site ?
Pour ce qui concerne la seconde question, lorsque tu utilises Composer, je te conseille fortement de faire tes recherches sur Packagist.org, tu pourrais par exemple y trouver : ezyang/htmlpurifier.

neecride
Auteur

@Lartak j'install mes libray depuis les command qui ce mette dans le dossier vendor, le soucis de namespace c'est que ça fonctionne sauf pour un objet qui ne fonctionne pas dans le namespace mais très bien sans et c'est incompréhensible, et non je n'ai pas regarder la formation POO sauf la partie "c'est quoi un objet" ensuite je teste par moi même.

Pour en revenir a htmlpurifier https://packagist.org/packages/ezyang/htmlpurifier pour que le markdown michelf fonctionne je dois faire un use Michelf\Markdown; et ça fonctionne sauf que la je ne vois pas ? pour purifier ou est le namespace dans la doc

@Kenor Merci je vais check ceci

neecride
Auteur

@Kenor : Merci de l'info ça fonctionne bien

Cela dit avant de mettre en résolu pour faire ce que tu ma dit il faut le faire comme ceci (ce que j'ai fais)

    "autoload": {
        "psr-4" : {"App\\" : "App"}
    },
    "autoload": {
        "psr-4" : {"" : "App/Myclass"}
    }

Ou comme cela (mes class ou je ne veut pas de namespace sont dans le dossier App/Myclass)

    "autoload": {
        "psr-4" : {"App\\" : "App"},
        "psr-4" : {"" : "App/Myclass"}
    }

Et pour les autre soucis il fallait mettre un AntieSlash devant les class, dernière question les library dans le dossier vendor il n'y a rien a faire elle s'autoload toute seul ?

Tout est dit :)

neecride
Auteur

En effet c'est moi qui est idiot j'avais pas vue que c'était un classmap et non pas psr-4

    "autoload": {
        "classmap": ["App/Myclass"]
    }

normalement ça devrais être bon en tous cas ça fonctionne.

Dans la doc j'ai trois paramêtre mais je n'ai pas besoin des 2 autre, puis je n'ai besoin que d'un parser, htmlpurifier, recaptcha donc ça limite quand même les conflits.

{
    "autoload": {
        "classmap": ["src/", "lib/", "Something.php"]
    }
}

Les trois paramètres dans le classmap, c'est juste un exemple, si tu n'as qu'une classe à charger, soit un fichier, tu ne définis que celui-ci.