Bernhard SchussekDefining PHP Annotations in XML (24.10.2014, 09:48 UTC)

Annotations have become a popular mechanism in PHP to add metadata to your source code in a simple fashion. Their benefits are clear: They are easy to write and simple to understand. Editors offer increasing support for auto-completing and auto-importing annotations. But there are also various counter-arguments: Annotations are written in documentation blocks, which may be removed from packaged code. Also, they are coupled to the source code. Whenever an annotation is changed, the project needs to be rebuilt. This is desirable in some, but not in other cases.

For these reasons, Symfony always committed to supporting annotations, XML and YAML at the same time – and with the same capabilities – to let our users choose whichever format is appropriate to configure the metadata of their projects. But could we take this one step further? Could we build, for example, XML support directly into the Doctrine annotation library?

Let’s start with a simple example of an annotated class:

namespace Acme\CRM;
 
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotNull;
 
/**
 * @Entity
 */
class Address
{
    /**
     * @Column
     * @NotNull 
     * @Length(min=3)
     */
    private $street;
 
    /**
     * @Column(name="zip-code")
     * @NotNull
     */
    private $zipCode;
}

Right now, if toolkits (such as Doctrine ORM or Symfony Validation) want to support annotations and XML schemas, they have to write separate parsers that duplicate a lot of common code. Wouldn’t it be nice if they could use a generic parser instead?

Let’s try to map the annotations to a generic XML file:

<?xml version="1.0" encoding="UTF-8"?>
<class-mapping xmlns="http://doctrine-project.org/schemas/annotations/class-mapping"
    xmlns:orm="http://doctrine-project.org/schemas/orm"
    xmlns:val="http://symfony.com/schema/dic/validation/constraint-mapping"
    xmlns:prop="http://symfony.com/schema/dic/property-access/property-mapping">
 
<class name="Acme\CRM\Address">
    <orm:entity />
    <property name="street">
        <orm:column />
        <val:not-null />
        <val:length min="3" />
    </property>
    <property name="zipCode">
        <orm:column name=

Truncated by Planet PHP, read more at the original (another 10342 bytes)

Link
Nomad PHPJanuary 2015 (24.10.2014, 00:01 UTC)

/Regex makes me want to (weep|give up|(╯°□°)╯︵ ┻━┻)\.?/i

Presented By
Brett Florio
January 22, 2015 20:00 CST

The post January 2015 appeared first on Nomad PHP.

Link
thePHP.ccBuilding Testable Applications (23.10.2014, 05:30 UTC)
Link
SitePoint PHPWhere are you? Implementing geolocation with Geocoder PHP (22.10.2014, 16:00 UTC)

GeoCoder PHP

The beauty of SitePoint, to me, is that you can get inspired to try something or be told about some cool project out there. The internet is simply too big for one person to scout out on their own. GeoCoder was one of those for me. I had never heard about it and came across it on the authors Trello board.

I love working with maps and geographic information and I use (reverse) geocoding heavily for a project I did for a client; CableTracks. We actually use a paid service for this although not for everything. The paid results hold much more information than you get from free services. I found out that GeoCoder PHP actually is what I was missing for the integration of various services that we use.

GeoCoder PHP provides: “an abstraction layer for geocoding manipulations”. The library is split into three parts: an HttpAdapter for doing requests, several geocoding Providers and various Formatter/Dumpers to do output formatting.

Installation

Installation of GeoCoder is most easily done using composer. Add the following to your composer.json:

{
    "require": {
        "willdurand/geocoder": "@stable"
    }
}

Or get one of the archives from the GeoCoder PHP website.

Continue reading %Where are you? Implementing geolocation with Geocoder PHP%

Link
Anthony FerraraWhen Rocks Falter (22.10.2014, 16:00 UTC)
I've never been a rock. I'm about as passionate as someone can be when I choose to do something. Unfortunately that means I tend to throw myself (my raw unadulterated self) at my interests. It's just who I am and who I've always been. This has positives and negatives associated with it (especially from a personal perspective).

Throwing yourself at a passion has enormous benefits. You get a lot done, you can truly touch people's lives. You can really change the world. But you also take on a lot of risk. Putting yourself out there is the easiest way to get burned. When you're passionate, it's hard to not take things emotionally. It's hard to not care. After all, caring is where you draw your power from.

I have always been held up by those that I knew were rocks. I always leaned on people who I know weren't just abiding a flight-of-fancy, but who could wear the tide. But what happens when you start to see those who you thought were rocks, falter...?

Read more »
Link
Christian WeiskeUsability: Anchors everywhere (22.10.2014, 15:58 UTC)

After adding clickable anchor links to every headline I longed for more: Make it possible to reference every paragraph and list item on my blog posts.

Adding IDs

The first step was adding an id attribute to every tag I wanted to link. Doing that manually is a pain, so I had to get it automated.

My idea was to take the ID of the previous headline and add some counting suffix. For example, the first paragraph following a headline with id="foo" would get id="foo-p1". Prefixing the number with a letter (p for paragraph, h for heading, l for list item) is necessary to keep the IDs stable when regenerating them. Adding a new list item does for example not change the numbers of the paragraphs.

The resulting code can be found in my pastebin: add ID attributes to all content tags of an xhtml page .

Showing clickable links

I followed the same pattern as before by adding empty anchor links at the end of a content tag:


I gave the content tags a position: relative and the anchor link tags position: absolute so I could put them at a position relative to the content tag.

Then they got a left position of -3ex and a padding of 3ex to keep them aligned to the content tag:

*[id] {
    /* make anchor links positionable */
    position: relative;
}

/* show IDs for anchors */
*[id]:hover > a.anchorlink:before {
    content: "\00B6";/* pilcrow */
    color: #888;
    font-size: smaller;
}
a.anchorlink {
    text-decoration: none;
    margin-left: 0.5em;
    font-size: smaller;
    position: absolute;
    top: 0px;
    left: -3ex;
    padding-right: 3ex;
    height: 100%;
}

Demo

Link
Cal EvansInterview with Ross Tuck (21.10.2014, 05:00 UTC)

Twitter: @rosstuck

Show Notes

Link
Brandon SavageIn Defense Of Self-Publishing (20.10.2014, 16:57 UTC)
Back in 2009, I signed a contract to write a book. The book was published by php|architect, and was called The PHP Playbook. It was published in 2011. Being my first book, I assumed that going the route of a traditional publisher made sense, but after publishing a book this way, I opted for self-publishing […]
Link
SitePoint PHPDrupal 8 Hooks and the Symfony Event Dispatcher (20.10.2014, 16:00 UTC)

With the incorporation of many Symfony components into Drupal in its 8th version, we are seeing a shift away from many Drupalisms towards more modern PHP architectural decisions. For example, the both loved and hated hook system is getting slowly replaced. Plugins and annotations are taking away much of the need for info hooks and the Symfony Event Dispatcher component is replacing some of the invoked hooks. Although they remain strong in Drupal 8, it’s very possible that with Drupal 9 (or maybe 10) hooks will be completely removed.

In this article we are going to primarily look at how the Symfony Event Dispatcher component works in Drupal. Additionally, we will see also how to invoke and then implement a hook in Drupal 8 to achieve similar goals as with the former.

To follow along or to get quickly started, you can find all the code we work with here in this repository. You can just install the module and you are good to go. The version of Drupal 8 used is the first BETA release so it’s preferable to use that one to ensure compatibility. Alpha 15 should also work just fine. Let’s dive in.

What is the Event Dispatcher component?

A very good definition of the Event Dispatcher component can be found on the Symfony website:

The EventDispatcher component provides tools that allow your application components to communicate with each other by dispatching events and listening to them.

I recommend reading up on that documentation to better understand the principles behind the event dispatcher. You will get a good introduction to how it works in Symfony so we will not cover that here. Rather, we will see an example of how you can use it in Drupal 8.

Continue reading %Drupal 8 Hooks and the Symfony Event Dispatcher%

Link
Anthony FerraraEducate, Don't Mediate (20.10.2014, 16:00 UTC)
Recently, there has been a spout of attention about how to deal with eval(base64_decode("blah")); style attacks. A number of posts about "The Dreaded eval(base64_decode()) - And how to protect your site and visitors" have appeared lately. They have been suggesting how to mitigate the attacks. This is downright bad.
Read more »
Link
LinksRSS 0.92   RDF 1.
Atom Feed   100% Popoon
PHP5 powered   PEAR
ButtonsPlanet PHP   Planet PHP
Planet PHP