ik wilde enkele quotes als key-name laten fungeren binnen de functie, en een dubbele quotes als string.quote:Op zondag 20 december 2015 20:26 schreef Swetsenegger het volgende:
Wat probeer je precies op te lossen dan?
Ja dacht ik al, net als dat je geen functie kan doorgeven maar alleen het resultaat. Helaas.quote:Op zondag 20 december 2015 20:29 schreef Aether het volgende:
[..]
Dat kun je niet achterhalen.
De functie die aangeroepen wordt krijgt "een" string binnen en weet niet hoe of waar deze vandaan komt (bijvoorbeeld uit een database of bestand).
Niet helemaal waar, het is wel mogelijk om een functie door te geven aan een andere functie. Maar de manier waarop ziet er niet uit, en 't is geen mooie optie. Verder is er geen functie om te bepalen of een string als "string" of als 'string' gedefinieerd is. Er zit ook geen verschil in die definities, behalve bij het aanmaken van de string zelf.quote:Op zondag 20 december 2015 20:35 schreef n8n het volgende:
[..]
Ja dacht ik al, net als dat je geen functie kan doorgeven maar alleen het resultaat. Helaas.
1 2 3 4 5 6 7 8 9 | <script> a = document.getElementById(id); b = ' " ' + a + ' " '; if (b) { //met enkele aanhalingstekens (want b = " ' value ' " --> geen error) } else { // met dubbele aanhalingstekens (want b = " " value " " --> wel error) } </script> |
dit is js lieverd (al ga ik deze functie later ook daarmee schrijven). Ik heb als 'hack' al geprobeerd een regex door te sturen maar ook dat moet als string. Ik zal zo even de functie neerplempen.quote:Op maandag 21 december 2015 11:55 schreef Ser_Ciappelletto het volgende:
Is er geen manier om daarvoor wat gewoonlijk een error zou zijn te gebruiken? Je invoerveld/script zodanig samenstellen met wat gewoonlijk een syntax-error zou geven, dat invoer met een " een bepaalde output geeft en invoer met een ' een andere.
Naïef voorbeeld dat allicht niet werkt om een idee te geven:
[ code verwijderd ]
It's not an error, it's a feature.
Ja, ik weet dat het JS is, maar zoals gezegd werkt dat niet met PHP omdat die strings niet opslaat met de eigen aanhalingstekens. Je kunt dat altijd ajax-en.quote:Op maandag 21 december 2015 12:11 schreef n8n het volgende:
[..]
dit is js lieverd (al ga ik deze functie later ook daarmee schrijven). Ik heb als 'hack' al geprobeerd een regex door te sturen maar ook dat moet als string. Ik zal zo even de functie neerplempen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | <?php // create elements from array function el(array $element = null, $item = null){ foreach ($element as $key => $value){ if ($key === 0){ $tag = $value; } // set tag elseif (is_numeric($key)){ // text content and/or html element if (gettype($value) === 'string' || is_numeric($value)) $content.= $value; else $content.= el($value, $data); } else $attributes.= attribute($key, $value, $item); // element attributes } // create html element and set attributes if any if (!$attributes) $result.= '<'.$tag.'>'; else $result.= '<'.$tag.' '.trim($attributes).'>'; // add contents if any and close element if ($content) $result.= $content.'</'.$tag.'>'; return $result; } // create element list from $data function html(array $element, array $data = null){ if (!$data) $result.= el($element); else foreach($data as $item){ $result.= el($element, $item); } return $result; } // create element attribute function attribute($name, $value, $item = null){ if ($value === true) return ' '.$name; if (gettype($value) === 'array') $value = find($value, $item); if (gettype($value) === 'string' || is_numeric($value)) { $quote = (preg_match('/^\w+$/', $value) ? null : '"'); return ' '.$name.'='.$quote.$value.$quote; } } // check for key in element $item array function find($keys, array $item = null){ if ($item && $match = $item[$keys[0]]) return $match; elseif ($item) $keys[0] = null; foreach($keys as $key => $value){ if ($value) return $value; } } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php // <header class=test><h1>Title</h1></header> echo el(['header', 'class'=>'test', ['h1', "Title"] ]); // <p>Text</p> echo el(['p', "Text"]); // data for the next template $pages = [ ['path'=>"one", 'name'=>"Page One",'title'=>"A page" ], ['path'=>"two", 'name'=>"Page Two", 'alt'=>"Another page" ] ]; // <ul><li><a href=one title="A Page">test</a><a href=two title="Another Page">test</a></li></ul> echo el(['ul', html(['li', ['a', 'href'=>['path'], 'title'=>['title'], "test" ] ], $pages)]); ?> |
Het eerste dat me bij die code opvalt is dat de functie el() 2 optionele argumenten heeft, waarbij de eerste een array moet zijn als je 'm opgeeft en anders gewoon null is. Vervolgens gebruik je die parameter alsof het altijd een array is, dat gaat vroeg of laat fout.quote:Op maandag 21 december 2015 13:13 schreef n8n het volgende:
Laat het echte probleem wel ff zien met de functie. Het gaat voornamelijk om el(), de andere zijn helper functies. html() is om een lijst van element uit te poepen, attribute om een attribute te maken, en find() om waarden uit de optionele $item te vinden.
De PHP
[ code verwijderd ]
De templating werkt met de data uit arrays.
Dit:
[ code verwijderd ]
Wat ik wil is waar in de laatste plaats "test" staat, er ook een key van $pages ingevuld kan worden.
Sorry voor de enorme lap code
edit: simpelere voorbeelden, door te nesten kan je een hele DOM opbouwen.
1 2 3 4 5 | <?php function el(array $element = null, $item = null){ foreach ($element as $key => $value){ ?> |
1 2 3 4 5 | <?php function el(array $element = array(), $item = null){ foreach ($element as $key => $value){ ?> |
1 2 3 4 5 | <?php function el(array $element, $item = null){ foreach ($element as $key => $value){ ?> |
Je genereert invalid html, al bij het eerste voorbeeld.quote:Op maandag 21 december 2015 13:13 schreef n8n het volgende:
Dit:
[ code verwijderd ]
Wat ik wil is waar in de laatste plaats "test" staat, er ook een key van $pages ingevuld kan worden.
Sorry voor de enorme lap code
edit: simpelere voorbeelden, door te nesten kan je een hele DOM opbouwen.
1 2 3 4 5 6 | <?php // <header class=test><h1>Title</h1></header> echo el(['header', 'class'=>'test', ['h1', "Title"] ]); ?> |
1 | <header class="test"><h1>Title</h1></header> |
ah dit is leerzaam, ga morgen even goed reageren.quote:Op zaterdag 26 december 2015 22:54 schreef Light het volgende:
[..]
Het eerste dat me bij die code opvalt is dat de functie el() 2 optionele argumenten heeft, waarbij de eerste een array moet zijn als je 'm opgeeft en anders gewoon null is. Vervolgens gebruik je die parameter alsof het altijd een array is, dat gaat vroeg of laat fout.
Dus in plaats van
[ code verwijderd ]
zou ik kiezen voor
[ code verwijderd ]
of voor
[ code verwijderd ]
Verder is het niet duidelijk wat $item voor type moet/mag zijn.
En de functies attribute() en find() hebben niet altijd een return statement. Afhankelijk van wat er aan parameters in gaat, wordt er iets of niets geretourneerd. En je gebruikt op verschillende plekken variabelen die niet eerst geïnitialiseerd zijn. Niet direct fout, maar wel een potentieel risico. Een tikfout in een variabelenaam kan tot ongewenst of onverklaarbaar gedrag leiden, dus wil je bij voorkeur geen enkele notice zien.
Goed, nu eens kijken naar het probleem
Altijd quotes gebruiken is makkelijker, dat scheelt ook in de code omdat je niet hoeft te bepalen of je ze wel of niet moet gebruiken.quote:Op zaterdag 26 december 2015 23:52 schreef n8n het volgende:
Bij enkele woorden zonder speciale karakters kan je de quotes weglaten maar dat is een implementatie-detail.
Ja klopt, ik dacht als ik toch minified html uitpoep kan ik net zo goed quotes weglaten wanneer deze ‘obsolete’ zijn. Ik denk er nog even over na (het is ook maar 1 regel dus zo gewijzigd).quote:Op zondag 27 december 2015 00:26 schreef Light het volgende:
[..]
Altijd quotes gebruiken is makkelijker, dat scheelt ook in de code omdat je niet hoeft te bepalen of je ze wel of niet moet gebruiken.
Ik ben voor de tweede gegaan, een lege array is niet de bedoeling.quote:Op zaterdag 26 december 2015 22:54 schreef Light het volgende:
[..]
Het eerste dat me bij die code opvalt is dat de functie el() 2 optionele argumenten heeft, waarbij de eerste een array moet zijn als je 'm opgeeft en anders gewoon null is. Vervolgens gebruik je die parameter alsof het altijd een array is, dat gaat vroeg of laat fout.
Dus in plaats van
[ code verwijderd ]
zou ik kiezen voor
[ code verwijderd ]
of voor
[ code verwijderd ]
Dat moet ook een array zijn, bij html() kan daar een array met $item's in om een nodelist te renderen, in el() is $item een data rij met named keys waar content in zit. Dit is waar het hele probleem om draait, want het lukt niet om onderscheid te maken tussen een html ‘nodelist’ array of de naam van een key in $item.quote:Verder is het niet duidelijk wat $item voor type moet/mag zijn.
Klopt, dat is nu een silent error omdat ik niet wilde dat wanneer niks gevonden werd er een error kwam, maar een element simpelweg leeg zou zijn. Ik zal een return null toevoegen.quote:En de functies attribute() en find() hebben niet altijd een return statement. Afhankelijk van wat er aan parameters in gaat, wordt er iets of niets geretourneerd.
Hoe bedoel je?quote:En je gebruikt op verschillende plekken variabelen die niet eerst geïnitialiseerd zijn.
Ik ga de eerste batch fixes vast patchen. dankjewel!quote:Niet direct fout, maar wel een potentieel risico. Een tikfout in een variabelenaam kan tot ongewenst of onverklaarbaar gedrag leiden, dus wil je bij voorkeur geen enkele notice zien.
Goed, nu eens kijken naar het probleem
Als voorbeeld de foreach loop in de el() functie.quote:Op zondag 27 december 2015 15:20 schreef n8n het volgende:
[..]
Hoe bedoel je?
[..]
Ik ga de eerste batch fixes vast patchen. dankjewel!
1 2 3 4 5 6 7 8 9 10 | <?php foreach ($element as $key => $value){ if ($key === 0){ $tag = $value; } // set tag elseif (is_numeric($key)){ // text content and/or html element if (gettype($value) === 'string' || is_numeric($value)) $content.= $value; else $content.= el($value, $data); } else $attributes.= attribute($key, $value, $item); // element attributes } ?> |
1 2 3 | <?php $content .= $value; ?> |
1 2 3 4 | <?php if (!$attributes) $result.= '<'.$tag.'>'; else $result.= '<'.$tag.' '.trim($attributes).'>'; ?> |
1 2 3 4 | <?php if (!$attributes) $result = '<'.$tag.'>'; else $result = '<'.$tag.' '.trim($attributes).'>'; ?> |
Een IDE die zulke dingen aangeeft, helpt ook.quote:Op zondag 27 december 2015 18:51 schreef n8n het volgende:
Zal dat nog even aanpassen, die concatenation was nog legacy van een probeersel, scherp.
Light.app bedankt voor je feedback, een IDE is nog even een brug te ver, schrijf meestal JS.quote:Op zondag 27 december 2015 19:07 schreef Light het volgende:
[..]
Een IDE die zulke dingen aangeeft, helpt ook.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | <?php $bcm_pin = 4; $huidige_tijd = date ( "U" ); $opkomst = date_sunrise ( time ( ), SUNFUNCS_RET_TIMESTAMP ); $ondergang = date_sunset ( time ( ), SUNFUNCS_RET_TIMESTAMP ); if ( $huidige_tijd > $opkomst AND $huidige_tijd < $ondergang ) { system ("gpio -g mode " . $bcm_pin . " out"); $huidig = exec ("gpio -g read " . $bcm_pin ); if ( $huidig == "1" ) { system ("gpio -g write " . $bcm_pin . " 0" ); echo "Zon opgekomen en status nog 1, op 0 gezet :-)"; } else { echo "Het is licht en de lamp is al uit"; } } else { system ("gpio -g mode " . $bcm_pin . " out"); $huidig = exec ("gpio -g read " . $bcm_pin ); if ( $huidig == "0" ) { system ("gpio -g write " . $bcm_pin . " 1" ); echo "Zon ondergegaan en status nog 0, op 1 gezet :-)"; } else { echo "Het is donker maar de lamp is al aan"; } } ?> |
Ook daarvoor is een IDE geen overkill hoor, zeker als je ook nog wat frameworks oid gebruikt. Kijk bijvoorbeeld eens naar Webstorm:quote:Op zondag 27 december 2015 19:58 schreef n8n het volgende:
[..]
Light.app bedankt voor je feedback, een IDE is nog even een brug te ver, schrijf meestal JS.
Lijkt leuk (afgezien van de overvloed aan spaties) maar ik zou 't script niet afhankelijk maken van de standaardwaarden voor lengte- en breedtegraad. Die zijn bij een standaardinstallatie niet eens in de buurt van je huidige locatie.quote:Op dinsdag 29 december 2015 22:01 schreef wobbel het volgende:
Help, klopt dit zo? Het testen duurt iets te lang Script draait elke minuut via crontab
Het script moet de GPIO op 1 zetten als de zon is ondergegaan en de GPIO nog geen 1 is.
Het script moet ook de GPIO op 0 zetten als de zon is opgekomen en dit nog niet gebeurd is.
[ code verwijderd ]
Ja wel, het is een raspberry in m'n meterkast waar ik de timezone (en lat/long) netjes heb ingevuldquote:Op woensdag 30 december 2015 12:26 schreef Light het volgende:
[..]
Lijkt leuk (afgezien van de overvloed aan spaties) maar ik zou 't script niet afhankelijk maken van de standaardwaarden voor lengte- en breedtegraad. Die zijn bij een standaardinstallatie niet eens in de buurt van je huidige locatie.
Dat was ik inderdaad ook altijd gewend en bovendien werkte ik bij voorgaande werkgevers ook vaak met mensen die de Nederlandse taal niet beheersten. Bij mijn huidige werkgever is het vrij irritant dat de helft van de domeinspecifieke terminologie in het Nederlands is en dat in veel projecten ook in de code is doorgevoerd.quote:Op maandag 18 januari 2016 18:47 schreef Tijn het volgende:
Alles Engels, want je wet nooit met wie je je code later nog wil delen.
Dit.quote:Op maandag 18 januari 2016 18:47 schreef Tijn het volgende:
Alles Engels, want je wet nooit met wie je je code later nog wil delen.
Ik kwam in de documentatie al 3.1 tegen idd, voorlopig blijf ik wel bij 2.8.2quote:Op maandag 18 januari 2016 18:58 schreef robin007bond het volgende:
Wat gaat Symfony 3.0 snel met versienummers zeg.
Misschien handig voor de collega-symfony-developersquote:Op maandag 18 januari 2016 18:58 schreef robin007bond het volgende:
Wat gaat Symfony 3.0 snel met versienummers zeg.
Leuk, maar die short closures komen er niet.quote:Op maandag 11 januari 2016 11:43 schreef Aether het volgende:
There Will Be Many Features Coming For PHP 7.1
PHP 7 was just released over one month ago but there is already much work going into PHP 7.1, the next major update to this widely-used web programming language.
• PHP Cryptography Objects (PCO) for better encryption/decryption/signing.
• Short closures.
• Generic types and functions.
• HTTP/2 and server push support.
Other proposals for future releases of PHP (not necessarily PHP 7.1) can be found via the RFC Wiki area. Stay tuned for more coverage of PHP 7.1 as its release approaches later in the year.
Erg onoverzichtelijk ook, had anders sowieso liever wat meer getypt om het leesbaar te houden.quote:Op maandag 18 januari 2016 19:20 schreef Light het volgende:
[..]
Leuk, maar die short closures komen er niet.
Ach, zoals op die pagina ook al staat komt het er (mogelijk) wel in maar dan in een net iets andere syntax.quote:Op maandag 18 januari 2016 19:20 schreef Light het volgende:
[..]
Leuk, maar die short closures komen er niet.
https://stackoverflow.com(...)upload-with-symfony2quote:Op zondag 31 januari 2016 14:19 schreef henrivo het volgende:
Hey guys! Even een vraagje voor de mensen die werken met Symfony(2/3).
Ik heb onlangs een UploadBundle gemaakt, so far so good. Voor single files. Nu wil ik echter de mogelijkheid om _meerdere_ files tegelijk te uploaden, en dat lijkt in de praktijk net een stuk lastiger te zijn. Mijn vraag is, voor degenen die eerder in deze situatie hebben gezeten, hebben jullie tips of advies mbt de Entity/Controller? Ik loop hier nu op vast en de officiële documentatie is gebaseerd op het uploaden van _single_ files.
Bedankt alvast!
Wat?quote:Op woensdag 3 februari 2016 10:50 schreef richolio het volgende:
Hallo,
Ik werk met ExpressionEngine, maar heb voor deze even PHP aangezet in mijn template. De URL is hoofdlettergevoelig, en die case sensitivity is nou net niet wat ik wil. Ik heb 6 segments, en als {segment_5} bijvoorbeeld "Rotterdam" is, dan doet "rotterdam" het niet. Nja, goed, hoofdlettergevoelig dus.
Het internet heeft niet geholpen. Misschien iemand hier die wat weet?
Ik had er misschien iets aan als ik em zelf niet was tegengekomenquote:Op woensdag 3 februari 2016 20:16 schreef robin007bond het volgende:
[..]
https://stackoverflow.com(...)upload-with-symfony2
Heb je hier wat aan?
1 | The class 'Symfony\Component\HttpFoundation\File\UploadedFile' was not found in the chain configured namespaces UserBundle\Entity, BlogBundle\Entity, |
Waarvan akte.quote:Op donderdag 4 februari 2016 00:05 schreef robin007bond het volgende:
PHP is een smerige taal. Dat moest ik toch nog even kwijt.
Ongeacht symfony zou ik sowieso de ontvanger niet meerdere files tegelijk laten opvangen, maar gewoon 1 route die 1 bestand ontvangt en dat verwerkt. Hetzij direct, of beter, in een queue/worker. Laat de voorkant dan maar lekker bestanden er in pompen.quote:Op zondag 31 januari 2016 14:19 schreef henrivo het volgende:
Hey guys! Even een vraagje voor de mensen die werken met Symfony(2/3).
Ik heb onlangs een UploadBundle gemaakt, so far so good. Voor single files. Nu wil ik echter de mogelijkheid om _meerdere_ files tegelijk te uploaden, en dat lijkt in de praktijk net een stuk lastiger te zijn. Mijn vraag is, voor degenen die eerder in deze situatie hebben gezeten, hebben jullie tips of advies mbt de Entity/Controller? Ik loop hier nu op vast en de officiële documentatie is gebaseerd op het uploaden van _single_ files.
Bedankt alvast!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | Host: 127.0.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding: gzip, deflate, sdch Accept-Language: nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4 Cookie: PHPSESSID=u0gn1n80b3v6ipkbstoi0fct41 DNT: 1 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36 X-CookiesOK: I explicitly accept all cookies HTTP/1.1 200 OK Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Connection: Keep-Alive Content-Type: image/png Date: Tue, 16 Feb 2016 18:16:18 GMT Expires: Thu, 19 Nov 1981 08:52:00 GMT Keep-Alive: timeout=5, max=100 Pragma: no-cache Server: Apache/2.4.6 (Win32) PHP/5.4.17 Transfer-Encoding: chunked X-Powered-By: PHP/5.4.17 |
1 2 3 4 5 6 7 8 9 10 11 12 | <?php $fp = fopen($foto_origineel, 'rb'); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); //keeps ie happy header('Content-Transfer-Encoding: binary'); header("Content-type: " . $headertype); header('Content-Length: ' . filesize($foto_origineel)); ob_end_clean();//required here or large files will not work fpassthru($fp); fclose($fp); exit; ?> |
De PHP binary + dll's vervangen?quote:Op dinsdag 16 februari 2016 19:21 schreef Chandler het volgende:
En weet iemand hoe ik gemakkelijk USBWEBSERVER van een nieuwe versie van PHP kan voorzien? zit nu met versie 5.2.nogwat maar wil graag ietsje hoger ivm password_hash functie...
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |