Mappen-structuur OOP applicatie
En de console output?
Heb wel nog een bijkomende vraag. Hoe zit het met een live omgeving? Werkt composer daar ook in? Hoe reageert composer daar?
Of is het alleen voor lokaal gebruik en als je iets online wilt zetten gewoon hop alles via ftp op de server?
@Wouter, nog even een vraag over je mappen-structuur. Wat is het voordeel van de opsplitsing tussen de map app en src? Het zijn toch beiden project specifieke bestanden?
En nog even iets, maakt composer niet een veeeel te lang path?
Waarom niet gewoon vendor/Symfony/Component/Yaml?
Gewijzigd op 07/02/2013 16:42:35 door Jasper DS
Quote:
Het werkt plotseling wel?
Het werkt misschien wel, maar lijkt me niet juist. Je hoort alles in 1 composer.json bestand te zetten.
Quote:
Hoe zit het met een live omgeving? Werkt composer daar ook in? Hoe reageert composer daar?
Dat ligt aan je host. Als je daar toegang hebt tot de console dan werkt composer daar ook, anders is het inderdaad gewoon alles overhoppen.
Quote:
Wat is het voordeel van de opsplitsing tussen de map app en src? Het zijn toch beiden project specifieke bestanden?
De src map is totaal variabel. Daar zit per project totaal iets anders in.
In de app map zitten dingen als de configuratie, cache en bootstrap bestanden. Deze zijn niet variabel, de structuur van deze map zal altijd hetzelfde zijn, alleen sommige bestanden (config en cache) zullen anders zijn.
Quote:
En nog even iets, maakt composer niet een veeeel te lang path?
[..code..]
Waarom niet gewoon vendor/Symfony/Component/Yaml?
[..code..]
Waarom niet gewoon vendor/Symfony/Component/Yaml?
Omdat Packagist wil uitsluiten dat je 2 packages hebt met dezelfde class. Stel je voor dat "wouterj/awesome" een Wj\Awesome\Foo klasse heeft en dat "copycat/awesome" ook een Wj\Awesome\Foo klasse heeft. In dat geval krijg je een conflict met jou 'korte' methode, met de huidige methode niet, aangezien alles eerst in mapjes op basis van de package naam is gemaakt.
Tevens zou ik me niet druk maken over de mappen structuur van deze third party libraries, dat is namelijk de taak van Composer, die moet zich druk maken hoe die alles goed kan autoloaden.
Wouter J op 07/02/2013 17:27:39:
Het werkt misschien wel, maar lijkt me niet juist. Je hoort alles in 1 composer.json bestand te zetten.
Quote:
Het werkt plotseling wel?
Het werkt misschien wel, maar lijkt me niet juist. Je hoort alles in 1 composer.json bestand te zetten.
Ik had alles in één .json bestand, dat werkte niet dus toen ben ik gaan testen in verschillende mappen met elk een andere .json. Uiteindelijk lukt het nu wel dus geen probleem.
Wouter J op 07/02/2013 17:27:39:
Omdat Packagist wil uitsluiten dat je 2 packages hebt met dezelfde class. Stel je voor dat "wouterj/awesome" een Wj\Awesome\Foo klasse heeft en dat "copycat/awesome" ook een Wj\Awesome\Foo klasse heeft. In dat geval krijg je een conflict met jou 'korte' methode, met de huidige methode niet, aangezien alles eerst in mapjes op basis van de package naam is gemaakt.
Is het de bedoeling dat ik mijn "framework" dan ook binnenhaal via composer? Anders is het vendor/JdsFramework/almijnmappenenbestanden idpv zo'n lange naam niet?
Ah en Wouter, werkt jouw snakeMvc ik zie dat je in index.php een $container geeft aan je frontcontroller maar die $container word nergens aangemaakt?
Nog een vraag, dus je zegt dat bootstrap.php ook in de app map hoort? Is die niet voor elk project hetzelfde en hoort hij daarom niet gewoon in de map van mijn "framework"?
Gewijzigd op 07/02/2013 18:25:42 door Jasper DS
Quote:
Is het de bedoeling dat ik mijn "framework" dan ook binnenhaal via composer? Anders is het vendor/JdsFramework/almijnmappenenbestanden idpv zo'n lange naam niet?
Je laat inderdaad vaak je framework apart in via composer. Wat er vaak wordt gedaan is dat je 2 packages hebt:
- Het framework, deze bevat alles wat in vendor/JdsFramework/... staat
- De SkeletonApplication of Standard Edition, deze laad het framework in en geeft de beste directory structuur om te gebruiken als je je framework gebruikt. Daarnaast zie je vaak dat hier ook nog wat 3th party libraries worden ingeladen die makkelijk werken icm jouw framework, maar niet verplicht zijn voor het werken van je framework.
Quote:
Ah en Wouter, werkt jouw snakeMvc ik zie dat je in index.php een $container geeft aan je frontcontroller maar die $container word nergens aangemaakt?
Oh, daar moet je helemaal niet naar kijken (ik zal hem wel eens van GitHub halen). Als ik sommige code daarvan zie schaam ik me dat ik dat ooit heb kunnen schrijven :P
Quote:
Nog een vraag, dus je zegt dat bootstrap.php ook in de app map hoort? Is die niet voor elk project hetzelfde en hoort hij daarom niet gewoon in de map van mijn "framework"?
Wie zegt dat ik altijd dezelfde bootstrap wil hebben? Misschien heb ik wel een project waarbij ik wat extra dingen in de bootstrap wil doen.
Dan nog een vraag.
Mijn mappen-structuur ziet er nu zo uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
app
src
vendor
composer
Jframe
Controller
FrontController.php
FrontControllerInterface.php
Autoloader
Model
..
symfony
yaml
Symfony
Component
Yaml
Yaml.php
web
src
vendor
composer
Jframe
Controller
FrontController.php
FrontControllerInterface.php
Autoloader
Model
..
symfony
yaml
Symfony
Component
Yaml
Yaml.php
web
Stel je nu voor dat mijn framework één of ander third-party lib nodig heeft voor te kunnen draaien, ontstaat er dan nog een vendor map in mijn framework map speciefiek voor het framework? Of gebruikt die gewoon de vendor map van van de applicatie?
Quote:
ik heb waarschijnlijk mijn composer.json verkeerd ingevuld?
Waarschijnlijk, misschien handig om je composer.json te laten zien?
Quote:
Stel je nu voor dat mijn framework één of ander third-party lib nodig heeft voor te kunnen draaien, ontstaat er dan nog een vendor map in mijn framework map speciefiek voor het framework? Of gebruikt die gewoon de vendor map van van de applicatie?
Dat laatste
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
{
"require" : {
"symfony/yaml": "2.3.*@dev"
},
"autoload": {
"psr-0": { "Jframe": "vendor/Jframe" }
},
}
"require" : {
"symfony/yaml": "2.3.*@dev"
},
"autoload": {
"psr-0": { "Jframe": "vendor/Jframe" }
},
}
En als ik probeer te updaten via
dan komt er dat er geen files geupdate moeten worden.
Gewijzigd op 08/02/2013 16:19:32 door Jasper DS
En dit:
Quote:
dan komt er dat er geen files geupdate moeten worden.
is heel normaal, hij geeft aan dat er geen packages geupdated moeten worden, maar hij zal wel de autoloading information updaten (want daarna zie je staan 'generating autoload files')
Hoe ziet je file er dan uit? (even het begin tot en met het declareren van de class)
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
namespace Jframe\Controller;
class FrontController implements FrontControllerInterface
{
...
?>
namespace Jframe\Controller;
class FrontController implements FrontControllerInterface
{
...
?>
En de error die je krijgt is?
Class 'Jframe\Controller\FrontController' not found
Ja, dan is het bestand dus niet gevonden. Heb je je json al aangepast naar wat ik zei? (zonder Jframe?)
Wouter, ik heb het gevonden. Ik had Jframe van de namespace verwijdert maar niet uit het path. Nu klopt het wel geloof ik. Even een klein misverstand langs mijn kant. Bedankt!