Gå til innhold

Riktig innlasting og bruk av submoduler


Anbefalte innlegg

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
Videoannonse
Annonse

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 av Crowly
Lenke til kommentar

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...