Anax - en webbmall för PHP-programmeraren

  • Författare
  • Meddelande
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11063
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Anax - en webbmall för PHP-programmeraren

Inlägg28 jun 2013, 17:12

I artikeln Anax - en hållbar struktur för dina webbapplikationer presenteras en struktur för webbmall för PHP-programmeraren.

Läs artikeln och fråga, diskutera eller kritisera den här. Eller kom med förbättringsförslag.
...
..:
.... /mos
Användarvisningsbild

Johan

sql-kodare

  • Inlägg: 50
  • Blev medlem: 10 nov 2011, 12:10

Re: Anax - en webbmall för PHP-programmeraren

Inlägg01 jul 2013, 13:52

Mina fem ören efter snabbkik:

Att separera kod för logik (PHP-kod) och innehåll (webbsidans innehåll i form av text) från kod som har med presentationen (utseende) att göra låter som en bra idé.


Kan ju bara hålla med men du väljer ändå att frångå detta i artikeln.

När du skapar innehåll att skicka till template så bör det endast vara den variabla datan, ingen html, ingen css.. ingenting!
Det är templatens uppgift att hålla reda på htmlstrukturen, inkludering av css och styling, interaktivitet med javascript osv. logiken ska bara bistå templaten med data, inget mer.
Detta gör ju att man dock inte kan ha en index.tpl.php för alla sidor utan får ha t.ex. en huvudlayout som petar in sidlayout i body (ruby on rails gör detta bra med yield, vilket man kan efterlikna i senaste php 5.5 med generators!). En sån här ändring kräver ju lite mer i render också, att den kan ta specifik template t.ex. istället för att anta index.tpl.php.


En sak till som jag tycker känns lite omständigt. Varje sida i webroot, som servas till användaren, måste inkludera config. Visst, en trivial grej kan man tycka men man måste då alltid börja med att kopiera en existerande sida, klipp-och-klista includen eller skriva include(...) manuellt varje gång. Då kommer vi till DRY (Don't repeat yourself).

Lösning? jajamensan:
En index.php som tar filnamnet man vill kolla på; ex. vill komma åt hello.php som jag då accessar via /index.php?p=hello.php (alt. /?p=hello.php), i index.php inkluderas config en gång, för alla gamla och alla nya sidor/filer. index.php behöver inte hålla koll på vilka filer som finns, bara att köra en file_exists och include om finns, annars 404 (samma beteende som utan index.php, fast lite mer kontrollerat och man kan skippa 404document i .htaccess).

Vill man sen slippa /?p=xxx.php och bara skriva /xxx.php som om man inte hade index.php så är det ju bara att fixa med mod_rewrite, ingen skillnad för användaren!
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11063
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Anax - en webbmall för PHP-programmeraren

Inlägg03 jul 2013, 12:40

Hmmm, jag behövde sova lite på saken.

Visst har du rätt, men jag kan för tillfället inte göra så mycket åt det med tanke på vad mina planer är för Anax.

Tanken är att Anax skall användas i oophp-kursen. Det betyder att man har förkunskaper motsvarande htmlphp-kursen och Anax skall vara en brygga som gör phpmvc-kursen lite enklare (och oophp-kursen svårare). så med tanke på denna placering så valde jag vissa saker i Anax profil.

Jag skippade en frontcontroller så att varje sida måste accessas direkt. Det gör att config.php måste inkluderas i varje sida (och även renderingen av sidan).

Jag skippade också vyer som hade löst en del av uppdelningen av HTML/Content som nu finns i sidkontrollern.

Vyer och frontcontroller tänker jag mig att hantera i phpmvc-kursen istället, och Lydia.

Jag tänkte låta Anax utvecklas i samband med oophp-kursen och byggas på, i form av Anax-oophp. När jag sedan är klar med oophp-kursen så tänkte jag mig en version 2 av Anax. Men jag vet inte riktigt vad den skall innehålla, än. Kanske frontcontroller, kanske vy-hantering. Får se vart den nya oophp-kursen tar det.

Jag ville ha en enklare version av ramverk än Lydia, men inte för enkelt. Nåt mellanting. Så var tanken med Anax.
...
..:
.... /mos
Användarvisningsbild

Kajvin

troubleshooter

  • Inlägg: 164
  • Blev medlem: 01 sep 2012, 11:13
  • Ort: Älmhult

Re: Anax - en webbmall för PHP-programmeraren

Inlägg13 aug 2013, 18:07

Mos det här ser ju spännande ut nästan så att man skulle läsa OOPHP en gång till. :o
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11063
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Anax - en webbmall för PHP-programmeraren

Inlägg19 sep 2013, 01:03

Gjorde en uppdatering av Anax-base till v1.0.1, changelog:

v1.0.1 (2013-09-19)

* `config.php`, including `bootstrap.php` before starting session, needs the autoloader()`.


Man måste inkludera filen bootstrap.php, innan man startar sessionen. Filen bootstrap.php innehåller autoloadern som laddar klassfilerna och den måste finnas på plats, innan man kan starta sessionen, annars kan man inte lagra objekt i sessionen. Så här ska det se ut i config.php.

När man gör det i fel ordning brukar man få felmeddelande likt detta :

Fatal error: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "CDiceHand" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in C:\xampp\htdocs\skola2\kmom02\webroot\test-includes\dice.php on line 78
...
..:
.... /mos
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11063
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Anax - en webbmall för PHP-programmeraren

Inlägg23 sep 2013, 17:26

Argh, testade dåligt. Min ändring funkade inte. Nu använda jag en konstant, innan jag definierat den... så dumt.

Så här ska config.php se ut:

Kod: Markera allt
/**
* Define Anax paths.
*
*/
define('ANAX_INSTALL_PATH', __DIR__ . '/..');
define('ANAX_THEME_PATH', ANAX_INSTALL_PATH . '/theme/render.php');


/**
* Include bootstrapping functions.
*
*/
include(ANAX_INSTALL_PATH . '/src/bootstrap.php');


/**
* Start the session.
*
*/
session_name(preg_replace('/[:\.\/-_]/', '', __DIR__));
session_start();


Rättade och frös ny tagg på github, nu v1.0.2.
...
..:
.... /mos
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11063
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Anax - en webbmall för PHP-programmeraren

Inlägg04 nov 2013, 09:27

Om patherna i theme-katalogen.

03:42 <@bobbzorzen> mos: varför har du "include(__DIR__ . '/file.php');" i din render.php istället för "include(ANAX_INSTALL_PATH . '/theme/file.php');" hade det inte varit mera logiskt att använda PATH konstanterna så mycket det går?
03:43 <@bobbzorzen> och varför inte ha ANAX_THEME_PATH = ANAX_INSTALL_PATH.'/theme/' och länka till filen med ANAX_THEME_PATH.'file.php'?
03:44 <@bobbzorzen> Jag tycker iaf att det känns mera logiskt ;)
08:25 <@mos> bobbzorzen: ju färred defines, desto bättre, tänkte jag. fanns ingen anledning till att man ville flytta theme bort från ANAX_INSTALL_PATH så jag behövde den inte.
08:25 <@mos> bobbzorzen: bra om theme inte har några beroenden utåt, därför är en lokal path __DIR__ bättre än ANAX_INSTALL_PATH.
08:26 <@mos> ändrar man kravbilden och vill kunna separera ut theme/katalogen så är ANAX_THEME_PATH en bra grej
...
..:
.... /mos

Rikard

html-guru

  • Inlägg: 61
  • Blev medlem: 20 aug 2013, 22:32

Re: Anax - en webbmall för PHP-programmeraren

Inlägg17 nov 2013, 21:35

I funktionen myAutoloader i bootstrap.php görs så att man måste lägga varje klass i en egen mapp med samma namn i src-katalogen, se koden nedan.
Kod: Markera allt
function myAutoloader($class) {
  $path = ANAX_INSTALL_PATH . "/src/{$class}/{$class}.php";
  if(is_file($path)) {
    include($path);
  }
  else {
    throw new Exception("Classfile '{$class}' does not exists.");
  }
}
spl_autoload_register('myAutoloader');

Finns det någon speciell tanke med detta? För CSource ger det fördelen att filerna README och LICENSE ligger tillsammans med CSource. Varför inte bara lägga alla filer i samma mapp. Eller gruppera dem efter funktion i några olika mappar.
/Rikard
/Rikard

john.svensson

html-guru

  • Inlägg: 67
  • Blev medlem: 01 sep 2013, 19:31

Re: Anax - en webbmall för PHP-programmeraren

Inlägg17 nov 2013, 22:36

Tanken är väl att man ska kunna samla filer som tillhör en modul i den katalogen, som du skrev readme och liknande. Problemet med denna autoloader är att om en modul skulle bestå av flera klasser kommer varje klass ha en separat katalog i /src/ mappen.

Det finns flera lösningar på denna, ena är att man namnger filnamnet på ett specifikt sätt för att berätta för autoloadern, "Aha den här filen ska ligga i underkatalogen x!" vilket man förslagsvis kan göra igenom Zend_ style, att man byter ut alla _ i ett klassnamn mot ett /, dvs

Forum_View
Forum_Admin

skulle motsvara

Forum/View.php
Forum/Admin.php

Ett annat sätt är att använda namnrymder (namespaces), fast det är ett litet svårare koncept for another day :)
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11063
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Anax - en webbmall för PHP-programmeraren

Inlägg18 nov 2013, 11:30

Rikard skrev:Finns det någon speciell tanke med detta? För CSource ger det fördelen att filerna README och LICENSE ligger tillsammans med CSource. Varför inte bara lägga alla filer i samma mapp. Eller gruppera dem efter funktion i några olika mappar.


Ja, det är ett sätt att gruppera filerna. Finns det alternativa sätt som löser uppgiften lika bra (eller bättre)? Jajamensan. Bla som John säger.

Jag har valt att göra så här, för att en "modul" finns i en katalog. Om CSource-modulen bestod av fler klasser så hade de samlats i katalogen src/CSource och hade inte skräpat ned i src/-mappen.

Lite längre fram lägger vi till andra klasser/moduler som följer andra namngivningsstandarder och de kan då döljas bakom en src/CModule mapp.

Så, ja det finns en tanke med uppdelningen. Men du får gärna pröva din egen uppdelning av filerna. Testa, annars hittar du inte den "bästa" vägen.

När en klass är en modul, så fungerar inte autoladdaren för modulens klassfiler, då får man göra include på dem, i modulens huvudklass (för den hanteras som vanligt av autoloadern).

En "modul" är mitt "påhitt" för att gruppera flera klasser som utför en uppgift som kan döljas bakom en huvudklass.
...
..:
.... /mos
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11063
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Anax - en webbmall för PHP-programmeraren

Inlägg22 nov 2013, 12:21

Ändrade hur sessionen namngavs i webroot/config.php.

Numer namnges den enligt:

Kod: Markera allt
/**
* Start the session.
*
*/
session_name(preg_replace('/[^a-z\d]/i', '', __DIR__));
session_start();


Läs mer i tråden som diskuterar varför.
...
..:
.... /mos

Björnen

javascriptare

  • Inlägg: 35
  • Blev medlem: 30 aug 2013, 17:24
  • Ort: Kungsör

Re: Anax - en webbmall för PHP-programmeraren

Inlägg15 feb 2014, 16:29

I instruktionen http://dbwebb.se/kunskap/anax-en-hallba ... likationer finns ett litet litet skrivfel:
Det står Anax/webroot/, Anax/theme/, Sen kommer felet : Anex/src/ under beskrivning för katalogstrukturen. :)

:idea:
Idé: Kanske två exempel på Anax.
Valmöjligheter att kunna följa/göra en specifik enkel övning för Anax utan JavaScript mm mm.
Och ett annat exempel på en Anaxövning med JavaScript, modernizer mm.
Nästan den enda här utan Facebook. =)
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11063
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Anax - en webbmall för PHP-programmeraren

Inlägg17 feb 2014, 10:02

Björnen skrev:I instruktionen http://dbwebb.se/kunskap/anax-en-hallba ... likationer finns ett litet litet skrivfel:
Det står Anax/webroot/, Anax/theme/, Sen kommer felet : Anex/src/ under beskrivning för katalogstrukturen. :)

:idea:
Idé: Kanske två exempel på Anax.
Valmöjligheter att kunna följa/göra en specifik enkel övning för Anax utan JavaScript mm mm.
Och ett annat exempel på en Anaxövning med JavaScript, modernizer mm.


Fixade stavfelet, tacksam.

Hmmm, att lyfta ut JavaScript-delen ur Anax-artikeln... för att göra introduktionen till oophp lite tydligare? Ja, jag kan se att det är en bra idé... funderar... kan sen lägga den biten som extrauppgift i kmom01... funderar...
...
..:
.... /mos

MrIsaksson

git-maestro

  • Inlägg: 122
  • Blev medlem: 11 jan 2014, 17:20

Re: Anax - en webbmall för PHP-programmeraren

Inlägg24 apr 2014, 02:00

.htaccess
Mac gömmer filer som startar med punkt. Kan man skippa punkten? Det känns som den är där av en anledning.

//Hampus
"Great programmers are lazy, and lazy programmers think in terms of reusability." - Beginning PHP and MySQL 5, From Novice to Professional, page 136.

MrIsaksson

git-maestro

  • Inlägg: 122
  • Blev medlem: 11 jan 2014, 17:20

Re: Anax - en webbmall för PHP-programmeraren

Inlägg24 apr 2014, 21:10

Jag lade till dice i anax för att testa och den kunde inte hitta filnament CDice så jag lade till include i config.php under bootstrap. Jag anar att det inte är så det är tänkt eftersom jag inte hittar den länkningen i mos config.php?

//Hampus
"Great programmers are lazy, and lazy programmers think in terms of reusability." - Beginning PHP and MySQL 5, From Novice to Professional, page 136.
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11063
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Anax - en webbmall för PHP-programmeraren

Inlägg24 apr 2014, 21:17

MrIsaksson skrev:.htaccess
Mac gömmer filer som startar med punkt. Kan man skippa punkten? Det känns som den är där av en anledning.


Ne, punkten behöver vara där. Det är en fil som används av apache webbserver och behöver stavas precis så.

https://en.wikipedia.org/wiki/Htaccess

Är du i terminalen skriver du följande för att visa dolda filer.

Kod: Markera allt
ls -a


Är du i finder så tror jag lösningen finns här:
https://discussions.apple.com/message/23522493#23522493
...
..:
.... /mos

MrIsaksson

git-maestro

  • Inlägg: 122
  • Blev medlem: 11 jan 2014, 17:20

Re: Anax - en webbmall för PHP-programmeraren

Inlägg24 apr 2014, 21:39

Ja, kanon.
Om någon annan har samma probem så är det så att mac inte tillåter en att skapa filer med en ".", då de är reserverade för systemfiler.

För att lösa problemet så öppna terminalen och skriv:

Kod: Markera allt
defaults write com.apple.finder AppleShowAllFiles -bool YES
killall Finder


Nu ser man dock alla gömda filer och vill man återställa så öppna terminalen och skriv:

Kod: Markera allt
defaults write com.apple.finder AppleShowAllFiles -bool NO
killall Finder


//Hampus
"Great programmers are lazy, and lazy programmers think in terms of reusability." - Beginning PHP and MySQL 5, From Novice to Professional, page 136.

Littlemeister

css-hackare

  • Inlägg: 28
  • Blev medlem: 31 aug 2014, 23:16

Re: Anax - en webbmall för PHP-programmeraren

Inlägg12 okt 2014, 20:10

Tyckte överlag att sånt här är mycket intressant. Läste igenom den 2 ggr och gjorde den manuellt en gång. Kommer från htmlphp.

Skulle jag ge något förslag så skulle jag önskat lite mer, tydligare och djupare förklaringar till varför du valt att göra på specifika sätt. Och gärna övertydligt.
Exempel: Vi har inte ens nuddat JS i htmlphp och ändå går du in på det som om det var helt naturligt. Och ofta skriver du att du valt att göra något på ett specifikt sätt, men inte varför.

Men framförallt: Förtydliga direkt om man ska göra Anax övningarna manuellt själv (dvs klipp och klistra, testa osv för att bygga upp anax själv med dina exempel på vägen) eller om du bara tycker man ska läsa det och sen i slutet kopiera från github och gå vidare. Jag gick igenom kmom01 uppifrån och ner, och när jag kommer en bit ner i kmomentet så står det att jag inte behövde göra javascript delen i anaxmallen, men även annat... sånt som man gärna vill veta innan man kämpat säg igenom övningarna.

Varför byta ut anax namnen? Det är ju ett skitbra namn och känns bara som slöseri på tid att byta ut det :P.

Annars mycket intressant och spännande att se vad detta kommer leda till i kommande övningar.
Mvh

Burnie

html-kodare

  • Inlägg: 19
  • Blev medlem: 03 sep 2012, 00:46

Re: Anax - en webbmall för PHP-programmeraren

Inlägg22 nov 2014, 16:02

Jag har en fråga.
Kan jag dölja så att ingen ser själva Anax mappen som är utomstående?
Just nu så från Visa källkod så ser man allt som har med min kod och göra.
Kan man dölja själva "server delen" på något smidigt vis?
Användarvisningsbild

Sylvanas

dbwebb

  • Inlägg: 1133
  • Blev medlem: 16 nov 2011, 17:03
  • Ort: Karlskrona

Re: Anax - en webbmall för PHP-programmeraren

Inlägg24 nov 2014, 10:42

Du kan ändra anropet till View() i CSource så att den bara visar källkoden för webroot. Men så länge du håller på med kursen så måste de som rättar se hela källkoden för mallen, inte bara webroot så det är i så fall något du får testa och åtgärda efter kursen har avslutats eller när du använder mallen för andra sidor utanför kursen.
Brain - "Are you pondering what I'm pondering?"
Pinky - "I think so, Brain, but there's still a bug stuck in here from last time."

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 23 gäster