cjmozart Skrevet 11. januar 2017 Del Skrevet 11. januar 2017 Heisan Ønsker veiledning ang bruk av eksterne submoduler i php. Jeg har inkludert biblioteket jeg ønsker å bruke (clonet som submodul i Git) og fulgt instruksjonene fra forfatteren for inkludering, men det virker ikke. Jeg kan inkludere filer på vanlig måte (require "submodule\src\Class.php") for å få det til å virke, men ønsker at hele biblioteket skal være tilgjengelig fra min egen hovedlokasjon; hvordan får jeg til det? Forfatter av submodul sier jeg skal inkludere biblioteket i samme namespace; ie. use \nameofdude\libraryname\Class as Class; men det fungerer naturligvis ikke av seg selv. Jeg er trøtt og i ammetåka, så vær snille å forklar TYDELIG mvh cjm Lenke til kommentar
Crowly Skrevet 11. januar 2017 Del Skrevet 11. januar 2017 (endret) Har ikke erfaring med kloning i git, så dette blir litt mer generelt. Se på autoloading, da trenger du kun en include/require. Composer er ett veldig nyttig verktøy for dependency managment i php prosjekter, den har også sin egen autoloader. Ett google søk på "composer autoloading guide" gir flere treff. Packagist er en nyttig side for å finne ymse pakker, som man installerer med composer. Skal du gjøre det manuelt så blir det noe slikt: require "submodule\src\Class.php"; // sjekk at path'en er riktig, eller spesifiser full path use \nameofdude\libraryname\Class as ClassAlias; $foo = new ClassAlias(); // alternativt uten use $foo = new \nameofdude\libraryname\Class(); Hvilken git bibliotek er det du prøver å include? Endret 11. januar 2017 av Crowly Lenke til kommentar
cjmozart Skrevet 11. januar 2017 Forfatter Del Skrevet 11. januar 2017 Hei og takk for svar. Lager noen funksjoner som skal bruke EWS og har endt opp med å bruke phpEws ( https://github.com/jamesiarmes/php-ews.git ) Dokumentasjonen er mangelfull og jeg føler at de fleste funksjonene er i overkant kronglete, men det er det jeg har å jobbe med hvis jeg skal jobbe i Php (alternativet er å gjøre det i C# eller lignende med MS-bibliotekene som er publisert) Endte opp med å Autoloade klassene med spl_autoload_register(), noe som til nå har fungert så lenge jeg husker å inkludere alle classene jeg skal bruke i use statements. Exchange er virkelig no herk. cjm Lenke til kommentar
Crowly Skrevet 11. januar 2017 Del Skrevet 11. januar 2017 Composer løsning: Lag composer.json i rot mappa { "require": { "php-ews/php-ews": "dev-master" }, "autoload": { "psr-4": {"DITT-NAMESPACE\\": "src/"} } } og erstatt DITT-NAMESPACE med ett valgfritt namespace, f.eks. cjm. Dvs at alle filer som ligger i src/ mappa ligger i namespace cjm, og bruker du undermapper så har de tilsvarende namespace, f.eks. ting som ligger i src/database har namespace cjm\database, src/database/ett-eller-annet i namespace cjm\database\ett-eller-annet osv. php-ews ender opp under vendor mappa som blir opprettet i rot katalogen av composer. Kjør composer install for å laste ned php-ews og å opprette autoload. Da er alt du trenger å include include '/path/til/rot-katalog/vendor/autoload.php'; og det gjøres gjerne i en fil som alltid er med, f.eks. bootstrap.php Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå