Ergebnis 1 bis 11 von 11

Thema: howto Include extra library ?

  1. #1
    Erfahrener Benutzer
    Registriert seit
    10.08.2012
    Beiträge
    128
    Thanks
    22
    Thanked 0 Times in 0 Posts

    Pfeil howto Include extra library ?

    Hallo,
    ich bin Anfänger und habe noch nicht begriffen, wie ich es anstellen kann, ein eigenes Library nicht in jedem Controller wieder neu zu _includieren".

    Bisher habe ich immer

    Code:
    include 'krumo/class.krumo.php';
    gemacht, um diese Klasse später benutzen zu können. Aber je mehr Kontroller kommen, um so unsinniger erscheint mir das. Es ist doch sicher möglich, sowas irgendwo (z.b. beim bootstrapping) zu konfigurieren oder aus der Registry zu holen , oder?

    Könnte mich bitte mal jemand in die richtige Richtung schubsen?

    Danke!

  2. #2
    Erfahrener Benutzer
    Registriert seit
    06.01.2009
    Beiträge
    240
    Thanks
    0
    Thanked 23 Times in 22 Posts

    Standard

    Stichwort Autoloading?

    Das klingt allerdings, als würde da noch etwas mehr falsch laufen. Was macht deine Library denn genau? Wofür bindest du sie ein?

  3. #3
    Erfahrener Benutzer
    Registriert seit
    10.08.2012
    Beiträge
    128
    Thanks
    22
    Thanked 0 Times in 0 Posts

    Standard

    die library dumpt variablen raus, in etwa wie
    Zend_Debug::dump($translate->getMessages());

    (--> http://krumo.sourceforge.net/)

    Autoloading klingt, als könnte es passen, aber ich habe noch nicht begriffen, wie das geht.

    Hier ist ein Thread, der wohl auch um das Thema geht, aber wenn einer schreibt:
    (Library einbinden / Namespaces)

    autoloaderNamespaces.mylib = "MYLIB_"
    dann kann ich damit nichts anfangen, weil meine library hier liegt:
    ../library/krumo/class.krumo.php

    Was sollte ich dann da statt MYLIB_ eintragen?

  4. #4
    Erfahrener Benutzer Avatar von SeKrebs
    Registriert seit
    04.02.2011
    Beiträge
    1.599
    Thanks
    1
    Thanked 41 Times in 40 Posts

    Standard

    Autoloading klingt, als könnte es passen, aber ich habe noch nicht begriffen, wie das geht.
    Na, dann wirds aber mal Zeit!
    PHP: spl_autoload_register - Manual
    autoloaderNamespaces.mylib = "MYLIB_"
    dann kann ich damit nichts anfangen, weil meine library hier liegt:
    ../library/krumo/class.krumo.php

    Was sollte ich dann da statt MYLIB_ eintragen?
    Damit hätten wir auch direkt das nächste Thema zur Recherche
    https://github.com/php-fig/fig-stand...epted/PSR-0.md
    (ZF1 verwendet den "alten" PSR-0-Standard (mit Unterstrich), weil logischerweise in PHP5.2 keine Namespaces möglich sind)
    "KingCrunchs kleine Welt" -- Blog
    The problem with rats leaving a sinking ship is that they usually do it by gnawing holes in the bottom.

  5. #5
    Erfahrener Benutzer
    Registriert seit
    10.09.2007
    Ort
    Wuppertal
    Beiträge
    5.725
    Thanks
    1
    Thanked 39 Times in 39 Posts

    Standard

    Du solltest dich an den PSR-0 Standard halten.

    Dazu kannst du dir auch die Klassen des ZF anschauen.

    Im Prinzip ist es so, dass Klassennamen auf Ordner-Pfade gemappt werden. Ab PHP 5.3 werden dafür Namespaces statt lange Klassennamen verwendet. Beispiele:

    Zend_Auth_Adapter_Db
    liegt unter library/Zend/Auth/Adapter/Db.php

    Zend\Auth (Zend Framework 2)
    liegt unter library/Zend/Auth.php


    Das ZF1 arbeitet mit Prefixes als Namespaces - also z.B. "Zend_" ist per default konfiguriert. Wenn man "MYLIB_" registriert, lassen sich Klassen unterhalb von library/MYLIB/ automatisch laden, wenn man zb. new MYLIB_*() verwendet.
    Neues Projekt: zandman.de - Status: WIP




  6. #6
    Erfahrener Benutzer
    Registriert seit
    10.08.2012
    Beiträge
    128
    Thanks
    22
    Thanked 0 Times in 0 Posts

    Standard

    Aha..
    und dann eher application.ini oder bootstrap ?

    Gibt's da auch noch irgendwo ein tutorial? Oder nur die PHP-Doc?

    Vielen Dank jedenfalls schonmal.

  7. #7
    Erfahrener Benutzer Avatar von SeKrebs
    Registriert seit
    04.02.2011
    Beiträge
    1.599
    Thanks
    1
    Thanked 41 Times in 40 Posts

    Standard

    und dann eher application.ini oder bootstrap ?
    Ist mehr oder weniger das selbe: Das Bootstrapping wird von der Ini gesteuert. Ergo: Eher INI, weil dann brauchste den passenden Code dazu nicht mehr selbst schreiben (gibts ja schon )
    "KingCrunchs kleine Welt" -- Blog
    The problem with rats leaving a sinking ship is that they usually do it by gnawing holes in the bottom.

  8. #8
    Erfahrener Benutzer
    Registriert seit
    10.09.2007
    Ort
    Wuppertal
    Beiträge
    5.725
    Thanks
    1
    Thanked 39 Times in 39 Posts

    Standard

    Hier mal ein Beispiel mit meiner Library: https://github.com/DennisBecker/lib-...applicationini

    Den PluginPath brauchst du nur, wenn du eigene Zend_Application Erweiterungen schreibst und einbinden willst.
    Neues Projekt: zandman.de - Status: WIP




  9. #9
    Erfahrener Benutzer
    Registriert seit
    10.08.2012
    Beiträge
    128
    Thanks
    22
    Thanked 0 Times in 0 Posts

    Standard

    Also ich habe jetzt in der bootstrap.php folgende funktion untergebracht:
    protected function _initKrumo() {
    $log = Zend_Registry::get('log');
    $log->debug('BOOTSTRAPPING KRUMO: ');
    if ('development' == APPLICATION_ENV) {
    $loader = Zend_Loader_Autoloader::getInstance();
    $loader->registerNamespace('KRUMO');
    return $loader;
    }// if
    }
    Dafür habe ich in meinem Controller das Include
    include 'KRUMO/class.krumo.php';
    auskommentiert.

    Der physikalische Pfad lautet:
    C:\Development\Projects\...\library\KRUMO\class.kr umo.php
    Aufruf ist dann in der Action so:
    krumo($_SERVER, $_ENV);
    Ergebnis: Was zunächst noch funktionierte, bringt nun einen Fehler:
    Fatal error: Call to undefined function krumo() in C:\Development\Projects\...\application\controller s\IndexController.php on line 74
    Offensichtlich habe ich irgendwas noch nicht richtig gemacht...Was stimmt denn noch nicht?

  10. #10
    Erfahrener Benutzer
    Registriert seit
    08.08.2011
    Beiträge
    466
    Thanks
    6
    Thanked 34 Times in 33 Posts

    Standard

    Funktionen können leider nicht durch den Autoloader geladen werden. Du wirst also um ein require_once nicht herumkommen (kann ja global passieren z.B. in der Bootstrap).

  11. The Following User Says Thank You to crash For This Useful Post:

    -iis- (29.08.2012)

  12. #11
    Erfahrener Benutzer
    Registriert seit
    10.08.2012
    Beiträge
    128
    Thanks
    22
    Thanked 0 Times in 0 Posts

    Standard

    Uff. Das ist mal eine Aussage.
    Dann kann ich ja nun aufhören zu suchen - ich verzweifelte schon fast.

    Danke

Ähnliche Themen

  1. Dekoratoren global in einer extra Klasse
    Von wesley im Forum Formulare
    Antworten: 7
    Letzter Beitrag: 19.06.2012, 15:04
  2. Caching im Controller oder "extra Layer"
    Von SRIT im Forum Konzepte & Ideen
    Antworten: 1
    Letzter Beitrag: 04.11.2009, 08:42
  3. [HOWTO] JavaScript komprimieren
    Von Bleistift im Forum FAQ/Howto
    Antworten: 16
    Letzter Beitrag: 20.03.2008, 15:07
  4. HowTo: FTP Synchronisation mit PDT
    Von sas171 im Forum FAQ/Howto
    Antworten: 10
    Letzter Beitrag: 22.02.2008, 12:31
  5. CVS(D) Howto
    Von Bleistift im Forum FAQ/Howto
    Antworten: 15
    Letzter Beitrag: 29.06.2007, 18:02

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •