Přečti si komunitní PHP blog


Taky přidej článek Add your post


ORM... WTF???

3 min | by Svaťa Šimara

We will take a look at what is the object-relational mapping and what it is not. We will show why it is difficult, when to use it and when it's better to avoid it.


How Anyone Can Write a Post Here

2 min | by Tomáš Votruba

Do you want to write about PHP, but don't have a blog? Do you have some ideas you'd like to share, but don't have time and know-how to spread them over social networks? Do you want to share your ideas to hunders of listening programmers?

Just write a post in Markdown and send PR to this open-source blog.


Cyklomatická komplexita

2 min | by Michal Katuščák

Cyklomatická komplexita, neboli podmínková složitost je metrika indikující složitost zdrojového kódu.

Jedná se o jednu z hlavním metrik, díky které lze posoudit jeho kvalitu.

Udává počet různých cest skrze zdrojový kód. K čemu je to dobré? Díky tomu lze blíže odpovědět na 3 otázky:

  1. Je kód dobře testovatelný?
  2. Je kód snadno čitelný?
  3. Je kód dostatečně spolehlivý?

Pomáhá nám to také určit počet testů, které bychom měli na kódu provádět.


Domain-Driven Design, part 8 - Services and Factories

3 min | by Svaťa Šimara

This article is a reaction to readers’ confusion about services. We'll cover a domain service and domain factory in this article and when to use them and when not to.


Symfony 4 - Ako v praxi funguje Flex

6 min | by Eduard Barnáš

Ako titulka napovedá, pozrieme sa spoločne na jednu z mnohých skvelých noviniek, ktorú priniesol framework Symfony vo svojej štvrtej verzii. Pokúsim sa Vám priblížiť, čo Symfony Flex vlastne je a ako pracuje.


Domain-Driven Design, part 7 - Alternative Relational Database Mapping

5 min | by Svaťa Šimara

Do you think that multilingual text must always be in a separate database table? Than this article is for you!

We will show that not all arrays have to be mapped as database tables. And we will also show the Doctrine implementation.


Symfony 4: Vytváříme chytrý kontroler

5 min | by Vladimír Macháček

Co kdyby byl Symfony kontroler schopný automaticky najít správnou šablonu k požadované akci bez nutnosti opakovaně psát její cestu? Co takhle mít možnost zasílat parametry do šablony z více míst a třeba i před renderovací metodou? Symfony 4 je skvělý framework ale po chvíli práce s ním mi začaly chybět některé fičury, na které jsem byl zvyklý z jiných frameworků, jako je například Nette Framework. Rozhodl jsem se, že si je do Symfony musím dodělat. V tomto článku vám ukážu, jak jsem toho docílil.


Domain-Driven Design, part 6 - Doctrine Repository

This post is Tested

11 min | by Svaťa Šimara

Now we will implement an actual relational database repository using Doctrine 2 and as always we'll try to test it.


Domain-Driven Design, part 5 - Repository

This post is Tested

6 min | by Svaťa Šimara

We will discuss how to store and read domain objects while pretending we have an in-memory system. Simply, we will show how to implement and test repository.


Domain-Driven Design, part 4 - Implementation

This post is Tested

4 min | by Svaťa Šimara

It is great to model something and now we have reached the point where we turn the model into the code. We will implement the model, no persistence, no input, only the most important part - the domain model. The implementation will be supported by tests and we will see how easy it is to test domain objects. We will also discuss the connection to the ubiquitous language and model and practical aspect of object encapsulation.


SOLID principy: Princip obrácení zavislostí

2 min | by Michal Katuščák

Definice říká, že:

A. Moduly vyšší úrovně by neměly záviset na modulech nižší úrovně.
Oboje by mělo být  závislé na abstrakci.

B. Abstrakce by neměla záviset na detailech.
Detaily by měly záviset na abstrakci.

De facto můžeme říct, že byste téměř vždy měli záviset na abstrakci a nikoli na konkrétní implementaci.


SOLID principy: Liskovové princip zastoupení

2 min | by Michal Katuščák

Liskovové princip zastupitelnosti je definovám jako tahle na první podhled děsivá rovnice:

Nechť Φ(x) je vlastnost prokazatelná objektu x typu T. Potom Φ(y) jsou pravdivé pro objekty y typu S, kde S je potomkem T.

Trochu lidskými slovy ale říká:

Supertyp by měl být plně nahraditelný podtypem.


SOLID principy: Princip otevřenosti a uzavřenosti

2 min | by Michal Katuščák

Princip říká, že:

Softwarové entity (třídy, moduly, funkce, atd.) by měly být otevřené pro rozšíření, ale uzavřené pro změnu.


SOLID principy: Princip jedné odpovědnosti

3 min | by Michal Katuščák

Princip jedné odpovědnosti (Single Responsibility Principle) je první z pěti principů SOLID (právě to S).

Jde o metodu, díky které se kód stává přehlednějším a srozumitelnější. Říká třídě, že je zodpovědná pouze za jednu jedinou věc.


A place to meet Statie

3 min | by Roman Veselý

I'm happy to announce that Statie, a newcomer to the field of static site generators written in PHP, received a place where it could promote itself better. Its own website. Though a really simple one; but it's healthy to start with small things, they say.


Jak naučit PhpStorm chápat kód

6 min | by Tomáš Fejfar

Fungující napovídání syntaxe vašeho kódu je naprosto základním předpokladem pro dobré fungování pokročilých nástrojů, které vám PhpStorm nabízí. Existuje několik možností, jak PhpStormu pomoci váš kód pochopit. Začneme těmi základními a postupně se dostaneme až k pokročilým.


Domain-Driven Design, part 3 - Simplify Object Model

6 min | by Svaťa Šimara

There are always many ways how to implement the abstract model. The implementation can be made in smooth and simple or in overcomplicated way. It is surprisingly easy to end up with a complicated solution.

But we will take the effort and introduce strategies and concepts that will help us simplify the model.


Debugování CLI skriptů s Xdebugem

2 min | by Jan Mikeš

Debugování je každodenním chlebem programátorů. Ukáži vám, jak rychle a jednoduše se dají debugovat konzolové skripty s Xdebugem.

Už žádné print() a echo v konzolových commandech pro zjištění hodnoty proměnné :-).


Domain-Driven Design, part 2 - Model

4 min | by Svaťa Šimara

All of us model every day. A friend tells us a joke, we imagine the situation and if we model it as is intended, we find the situation funny. A customer wants to have a new functionality and while he speaks, we try to imagine what does the customer wants - we model.

We are going to take a look at what is software modeling, how can we express the model and how can we capture key concepts.


Strange codes, multiple identities and team habits

2 min | by Roman Veselý

Just what I had in my mind or have tackled with in the recent past underlayed with the knowledge of the others.


SOLID principy: Princip odděleného rozhraní

4 min | by Michal Katuščák

Princip odděleného rozhraní je definované Robertem C. Martinem původně pro Xerox a říká:

Více specifických rozhraní je lepší než jedno obecné rozhraní.

Při jeho dodržování se kód stává více znovupoužitelný a užitečný. Pokud je více tříd nuceno implementovat rozhraní s metodami, které nepotřebují, je vhodné najít logický průnik (v čem se shodují) a rozhraní oddělit.


Domain-Driven Design, part 1 - Language

5 min | by Svaťa Šimara

Domain-driven design is a software design that focuses on understanding underlying business. It is useful for long-term projects because it leads to high-quality software that serves users. It helps when dealing with difficult problems, keeps track of core problems and prevents us from getting lost in the code.


Doctrine 2 – Dědičnost entit

4 min | by Tomáš Pilař

Entity v ORM (objektově relační mapování) zachycují objekty z reálného světa a transformují je do tříd v programovacím jazyku. V reálném světě má vždy skupina objektů stejné vlastnosti a liší v některých detailech. Všichni lidé mají jméno, datum narození, pohlaví, ale liší se v barvě očí, pleti, dovednostech apod.

Při čistém návrhu entit by se nám tedy hodila dědičnost. Umí ji Doctrine zpracovat, a jak s takovou entitou pracuje?


Jak jsi začal s PHP?

2 min | by Tomáš Votruba

Dnes se řeší jaká technologie je nejlepší, kdo má větší kontejner nebo nejnovější smartfoun. Ve víru informací se zapomíná na to, jak naše PHP cesty vlastně začaly. Co v nás tu vášeň zažehlo.

Před nedávnem jsme dávali anketu Jak jsi začal s PHP. Pojďme si tu vášeň připomenout - tady je pár vybraných kousků, které jste nám poslali.


Tipy na potopení projektu: #1 Trvejte na oblíbeném komunikačním kanále

2 min | by Petr 'PePa' Pavel

Existuje tisíc a jeden způsobů, jak podělat projekt, a v našem seriálu si některé ukážeme. Dnes bych rád mluvil o způsobu komunikace.


How to connect ELK with Monolog

9 min | by Matěj Račinský

ELK is awesome stack for logging. Monolog is awesome PHP logging library. Let's make them work together.


How to use ELK stack

3 min | by Matěj Račinský

In this article, I'll show you how to use ELK stack for logging. We will use ELK in docker for easy setup.


Jak hromadně spravovat privátní composer balíčky

4 min | by Martin Knor

Composer je dobrý sluha, ale zlý pán, pokud nevíte jak s ním pracovat. Podívejte se na naše workflow vývoje, kdy je dána plně modulární aplikace a ta se řídí závislostmi na konkrétních balíčcích.


Arachne/Verifier + Arachne/EntityLoader - Using Entities in Verifier Rules

4 min | by Jáchym Toušek

This article demonstrates that while Arachne components are mostly independent on each other, their potential raises dramatically when you use them together. Push both Arachne/ParameterValidation and Arachne/SecurityVerification to their limits with Arachne/EntityLoader!


Arachne/EntityLoader - Object Parameters for Nette/Application

2 min | by Jáchym Toušek

Ever wanted to get rid of EntityManager::find($id) as the first thing in your every presenter action? With Arachne/EntityLoader you can. Of course it is not limited to Doctrine, you can easily use it with a different ORM library.


Arachne/Verifier - Request Validator for Nette/Application

3 min | by Jáchym Toušek

The concept behind Arachne/Verifier was originally meant to solve annotations-based authorization for Nette/Application. Now after years of development it is no longer limited to neither annotations nor authorization making it a very powerful tool for your security layer.


Arachne/Security - Simplified Authorizator and Fixed ACL Callbacks

3 min | by Jáchym Toušek

Authorization in Nette/Security has some long-known drawbacks as demonstrated in my 4 years old RFC (Czech only). This article will show you how you can solve these problems using the enhanced API provided by Arachne/Security.


Arachne/Security - Separate Authentication and Session Refresh

4 min | by Jáchym Toušek

In many cases Nette/Security lacks the API needed for certain tasks. Experienced Nette users therefore often recommend using some custom solution instead. In this article I'll go over the known problems with user authentication and how Arachne/Security can help you solve them.


The Bulletproof Event Naming For Symfony Event Dispatcher

4 min | by Tomáš Votruba

I wrote intro to Symfony\EventDispatcher and how to use it with simple event.

But when it comes to dispatching events, you can choose from 4 different ways. Which one to choose and why? Today I will show you pros and cons of them to make it easier for you.


Nenechte si podrazit nohy iterátory v PHP

This post is Tested

5 min | by Honza Kuchař

Iterátory v PHP jsou občas zrádné. V některých kolekcích se chovají neintuitivně. Zjistěte proč a vyhnete se tím hodinám zbytečného hledání chyb.


Best Practice for Symfony Console in Nette

4 min | by Filip Procházka

If you use Symfony\Console in Nette, you will be probably familiar with php index.php command approach. It has been obsolete since Nette 2.3, and we should all migrate to its successor. This blog post will show you why and how.


Rozběhnutí Symfony na Wedos multihostingu

2 min | by Lukáš Vraný

Spuštění webu postaveném na Symfony na Wedos multihostingu vypadalo na první pohled jako snadná věc. Nakonec jsem se na tom zasekl na 3 dny, než jsem přišel na to, jak hosting správně nastavit.
Aby se s tím nemusel trápit někdo další, tak jsem se rozhodl sepsat tento článek s návodem a s problémy na které jsem narazil. Finální řešení je nakonec jednoduché.


Nastavení GitLab CI pro produkční aplikaci

7 min | by Tomáš Jacík

GitLab CI je dnes moderní. Vychází o něm články s krásnými, jednoduchými příklady, jak jej začít používat. Pak ale člověk narazí. Jak se utkat s překážkami a vyjít z toho jako vítěz?


Multiple PHP versions, the easy way

5 min | by Michael Moravec

Always wanted to try or run your application with a different PHP version without breaking everything else? Why not, there is a way to run multiple versions in parallel!


Live a file templates v PhpStormu

6 min | by Matěj Račinský

Jak si usnadnit život používáním live a file templates v PhpStormu


Jak posílat e-maily přes Amazon SES

6 min | by Petr Jirásek

Posílat emaily přes Amazon SES je snadné a levné. Zkuste to taky.


Git - proč se jej učit v příkazové řádce

4 min | by Václav Makeš

Tento článek je určen pro začátečníky, kteří se chystají začít učit verzovací systém Git. Popisuje proč se vyplatí používat Git v příkazové řádce namísto v grafickém prostředí externích SW či IDE.


How to add HTTPS to GitHub Pages in 6 Steps

3 min | by Tomáš Votruba

I always loved GitHub Pages, thanks to open-source and free hosting. Last thing that made me feel too oldschool was the plain "http://" protocol. That is usually the main argument why people move from GitHub Pages elsewhere, i.e. their own VPS. What a pity.
Fortunately, thanks for Michal Špaček's ability to explain complex stuff in a simple way, we solved this over a single weekend.


Jak snadné je používat CI

5 min | by Jaroslav Hranička

Nejspíš jste zkratku CI již někde viděli, možná tušíte, co Continuous Integration znamená. Chcete vědět, jak snadno CI používat na vašich projektech? Pak čtěte dále.


PHP u nás čeká rok expanze

3 min | by Tomáš Votruba

Za minulý rok naše php komunita vyrostla jako nikdy předtím. Přestali jsem řešit, kdo má větší framework, začali jsme sdílet online i offline a spojovat se napříč republikou. Mám z toho ohromnou radost!

Dnes se s tebou chci podělit o to, kam jsme zatím došli a jaká velká cesta nás ještě čeká.


Drop RobotLoader and let Composer Deal with Autoloading

4 min | by Tomáš Votruba

Using 2 tools for one thing, in this case 2 packages to autoload classes, are sign of an architecture smell. Many applications I see contain RobotLoader for historical reasons. I will borrow this from psychology: pathological behavioral patterns tear us down in the present, but were useful in past.

The best way to deal with them is acknowledge their purpose and then, let them go and enjoy the gift of present.


Kostra testované aplikace

5 min | by Jaroslav Hranička

Stále tápete, jak vytvořit základní kostru aplikace, kde je Composer vč. autoloaderu a máte i testy? Podíváme se na to, že to je velmi jednoduché.


How to use Dynamic Constraints with Symfony/Validator

This post is Tested

3 min | by Jáchym Toušek

Some edge-cases with Symfony Validator might force you to create a constraint dynamically during the validation. This article will show you how to do it and how to solve error mapping for such constraints.


How to use Conditional Constraints with Symfony/Validator

This post is Tested

4 min | by Jáchym Toušek

In some more complicated cases you need to do some validations only if some condition is met. This article covers the tricks you should use including a new feature in Symfony 3.2.


How to use Comparison Constraints with Symfony/Validator

This post is Tested

2 min | by Jáchym Toušek

With Symfony/Validator there is no obvious way to implement validations like comparing a value to another property on the same object. There are several articles about this topic already but literally all of them are completely outdated. In this article I'll cover the correct way to solve this.


Jak na akceptační testovaní pomocí Codeception

4 min | by Matěj Račinský

Jak automaticky testovat celé stránky a simulovat chování uživatele na webu pomocí Codeception


How to rehash legacy passwords in Symfony

6 min | by Ivan Kvasnica

You need to import users from an old project, but but don't want to bother them with resetting their passwords just because you want to use bcrypt. Fortunately, there is a solution.


Konfigurační objekty v Nette

This post is Tested

4 min | by Tomáš Jacík

Jak se poprat s předáním konfigurace službě z config.neon? A jak k tomu využít Nette DI?


Jak zaregistrovat Nette komponentu jako posluchače událostí

This post is Tested

9 min | by Tomáš Pilař

Dnes si povíme o tom, jak přimět Nette komponenty poslouchat na události, které nám vyvolává aplikace a umožnit jim se podle toho zachovat.


Inteligentní debug mode v Nette

3 min | by Tomáš Jacík

Jak se poprat se zapínáním debug módu při vývoji a jeho vypnutím na produkci? A co debug mód v konzoli? Pojďme se podívat, jak to řešit lépe.


Jak snadno a rychle upravovat soubory ve vendoru?

5 min | by Tomáš Pilař

Už ses někdy dostal do situace, kdy jsi potřeboval opravit chybu nějaké závislosti ve složce vendor? Jak takovou úpravu sdílet v týmu s ostatními programátory a jak ji udržet v souboru i po spuštění composeru? V tomto článku se dovíš, jak snadno a elegantně se tento problém dá vyřešit během 1 minuty.


Jak funguje Dependency Injection v Symfony a v Nette

4 min | by Petr Olišar

V tomto článku si ukážeme základy Dependency Injection – jaký je rozdíl mezi Nette presenterem a Symfony controllerem. A jak přenést trochu chování Nette do Symfony.


Why articles with code examples should be CI tested

4 min | by Tomáš Votruba

I know many great articles that go right to the point. I use their code examples and they work. But when I recommend these articles to people I mentor, I realize the articles are already 2 years old and their code samples probably do not work any more. From hero to zero. Today I will show you how to keep them alive lot longer with a minimal effort.


5 témat, po kterých PHP programátoři touží

3 min | by Tomáš Votruba

Zajímá české a slovenské programátory spíš intro do Gitu nebo Symfony pro pokročilé? Chtějí spíš týdenní výuku nebo víkendovou? Celý den nebo jen pár hodin? Na tyto a další otázky jsme měli jen subjektivní odpovědi. Chěli jsme vědět – a tak vznikl dotazník o vzdělávání na míru - na něj nám odpovědlo 76 z vás a dnes se podělíme o jeho výsledky.


Symfony Console from the Scratch

This post is Tested

3 min | by Tomáš Votruba

Symfony Console is the one package you will probably use to build a PHP CLI app. It's of one the easiest Symfony components. Why? You only create Application class, add your Command class and you are ready to go.


Testování PHP kódu

7 min | by Petr Hejna

Testování aplikací není vždy tak snadné, jak se na papíře jeví. Svojí zkušeností jsem dospěl k několika zásadám a postupům, které se mi osvědčily a které se tu pokusím sepsat a částečně i zdůvodnit. Pomáhají mi k psaní čítelnějších a udržovatelnějších testů. Za hlavní přínos pak považuji snadnou rozšiřitelnost testů, jejíž potřeba přichází s rozšiřováním fukcionality projektu.


Adminer pre Redis, Memcache, RabbitMQ

2 min | by Michal Lulčo

Pred nejakým časom som potreboval vyhľadávať a zoraďovať dáta v Redise. Takže som si k tomu napísal jednoduchý PHP skript. A keď už som ho mal napísaný, chcel som pomôcť aj dalším ľuďom, ktorí by riešili podobný problém ako ja.


Jaký byl SymfonyCon Berlín 2016

2 min | by Pavel Rozehnal

Největší událost v Symfony světě je za námi. Představeny byly služby SensioCloud, nový balíčkovací systém Symfony Flex a mnoho dalšího.


Event Dispatcher from the Scratch

This post is Tested

3 min | by Tomáš Votruba

Today we will look at first Symfony component - Event Dispatcher. Why should you start with it? It gives you flexibility, it is easy to understand and it helps you to write decoupled code.


Chceš psát o PHP? Pošli Pull Request!

2 min | by Tomáš Votruba

Pokud ti v psaní brání to, že nemáš funkční blog, krásný design, velké sociální kruhy pro šíření článků nebo copy-cítění, máme pro tebe řešení - komunitní blog o PHP. Nudnou rutinu nech na nás a v klidu se věnuj psaní.


Podcast Nejen o PHP #3 - Kam kráčí Péhápkaři a jak se můžeš přidat

1 min | by Honza Černý

Komunita stojí na vás, na lidech - vytvořili jste logo, web, soutěžíte a přednášíte a mluvíte o tématech. Jak se můžeš dál zapojit online i offline - to už v dnešním podcastu.


Podcast Nejen o PHP #2 - Blíží se hackatony, spojování sil a růst komunity - buď u toho!

1 min | by Honza Černý

Na podzim se urodilo pár hackatonů, PHP srazů a po půl roce krystalizuje nápad na spojování a růst komunity. Kam směřuje PHP dál a jak nám s tím můžeš pomoct? Poslechni si v dnešním podcastu.


Symfony komunita roste na PéHáPkaře a otevírá se všem PHP programátorům

3 min | by Tomáš Votruba

Symfony komunita mění svůj název, jinak vše zůstane stejné jako dosud. Říkáš si proč? To se dnes dozvíš.


Podcast Nejen o PHP #1 - O sebevzdělávání, školení a mentoringu

1 min | by Honza Černý

Poslední půlrok u nás vzniká spousta možností, jak se vzdělávat v PHP. A zadarmo.

Kdo je pořádá? Proč na ně není takový nával? A jak by tomu mohl pomoc mentoring?

O tom všem se dnes pobavíme.


Kolik lidí je potřeba k vytvoření jedné komunity?

5 min | by Tomáš Votruba

CEO České Symfony komunity. Vedoucí, evangelista, ten co dělá tu Symfony komunitu... Tak mi mnozí z vás občas říkají. Já se však pořád nemůžu zbavit pocitu, že za Symfony komunitou, tak jak ji známe v její dnešní podobě, nejsou vidět ty desítky dalších tváří, na kterých to celé stojí. Tváří lidí, kteří k ní přispěli malým či velkým dílem, kteří mě nakopli, a kteří mi pomáhají víc, než si sami vůbec uvědomují. Bez nich by tady totiž dnes nebylo vůbec nic. A proto bych vám o nich dnes rád řekl.