zend includen.
maar die van zend is heel uitgebreid. in de installation guide heb ik gelezen dat ik het gewoon moet includen en klaar en heb wat gegoogled en ben tot deze code gekomen.
Code (php)
is dit de code die ik hiervoor moet gebruiken?
overigens heb ik de mappen van de framework uitgepakt in dezelfde map als mijn index.php dus het ziet er zo uit
map1
map2
library
index.php
map3
map4
etc etc.. is dit goed?
edit: ik heb ook nog dit liggen maar weet niet of dit er nu bij moet.
Code (php)
1
2
3
4
2
3
4
<?php
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
?>
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
?>
op de website staat ook iets anders over in mijn htaccess maar dat is volgens mij voor productie omgeving.
Gewijzigd op 26/04/2012 20:53:42 door Reshad F
Hoe het verder precies gaat in Zend weet ik niet uit mijn hoofd, maar dan moet in die docs goed te vinden zijn.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
// eigen klasse map
include('class_lib.php');
//zend framework
define('APPLICATION_PATH', realpath(dirname(__FILE__)));
$paths = array(
APPLICATION_PATH . '/../library'),
'.',
);
set_include_path(implode(PATH_SEPARATOR, $paths);
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
?>
// eigen klasse map
include('class_lib.php');
//zend framework
define('APPLICATION_PATH', realpath(dirname(__FILE__)));
$paths = array(
APPLICATION_PATH . '/../library'),
'.',
);
set_include_path(implode(PATH_SEPARATOR, $paths);
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
?>
Ga anders eens de code regel voor regel door:
Regel 3) je include een class_lib.php (waarom?)
Regel 7) je maakt een constante aan die het absolute (realpath) van het index.php bestand bevat
Regel 8-11) je defineerd een paar paden waarin je klassen kan includen (in dit geval /../libary)
Regel 12) je set het include_path met al die paths in de array
Regel 14) je included het autoloader bestand van zend
Regel 15) je krijgt een instance van de Zend autoloader (omdat deze loader een singleton is)
Regel ??) je moet nog ergens de autoloader registreren?
Je had dit natuurlijk ook zelf kunnen doen door op PHP.net te kijken, ga het gewoon rustig door en probeer niet teveel te doen. Tevens vind ik Zend nou niet het beste framework om in de broncode te kijken, maar dat is misschien wel persoonlijk.
Kijk anders ook eens naar die andere topics over autoloading.
regel 3) die php file gebruik ik om mijn eigen gemaakte class in te zetten. of werkt dit niet i.c.m ZEND?
en wat vind jij een goed framework om van te spieken dan?
verder. de autoloader registreren gebeurt dit ook in een class? ik heb even op php.net gezocht en vond twee oplossingen
een was __autoloader en de ander was
spl_autoload_register(function($className)
{
require(str_replace('\\', '/', ltrim($className, '\\')) . '.php');
});
ik las ergens dat _autoloader misschien in de toekomst deprecated werd. is dit zo? welke moet ik nu hier gebruiken?
Lees anders ook de topics die ik net heb gegeven, dit doe ik niet om leuk wat linkjes te posten maar om jou te helpen. Ik ga namelijk niet 10x hetzelfde uitleggen...
Ik vind eigenlijk geen 1 goed framework om te spieken, maar ik vind zelf die Symfony veel makkelijker spieken dan Zend, omdat die zo enorm gecompliceerd is.
Even nog een handige tutorial, als je toch aan de gang gaat met symfony: Create your framework en van flat naar OOP
In deze autoloader kan je namespaces toevoegen. Deze worden gebruikt om te zien welke classes er mogelijk geladen kunnen worden. Standaard staat er Zend en ZendX dacht ik.
Wat er nu exact gebeurd is het volgende:
- php roept een class aan en die wordt niet gevonden
- spl autloader meld aan de geregistreerde autoloader functies dat de klasse niet te vinden is
- In deze geregistreerde autoload functies zit: Zend_Loader_Autoloader::autoload()
(- Deze autoload functie roept de instantie van de autoload klasse op. Bekijk even: singleton pattern om dit volledig te snappen.)
- Deze functie gaat dan voor elke geregistreerde namespace in de Zend_Loader_Autoloader op zoek naar die onbekende klasse/
- Per namespace wordt in uw include paths gezocht of deze classe gevonden kan worden. Bij zend is dat dan in de /library/Zend map.
- Als een juist bestand wordt gevonden, dan wordt dit gerequired en kan er dus gebruik gemaakt worden van uw klasse.
Met andere woorden. Als je gewoon uw custom Framework in de map library zet:
/library/Custom/
En je registreerd een namespace:
(Deze code kan je dan best in de applicatie bootstrapper plaatsen)
Dan zorgt Zend framework ervoor, dat uw custom code gewoon geladen wordt door de autoloader.
@veewee dank! ik ga ermee aan de slag :) @wouter zou je mij dan ook aanraden om Symfony boven ZEND te gebruiken? (buiten het spieken om)
Ook vind ik de site van Symfony stukken beter qua design en pagina's enzo en helaas pas ik als designer daar ook mijn mening op aan.