PHP ClassesLately in PHP in - Lately in PHP podcast episode 75 (30.9.2016, 06:33 UTC)
By Manuel Lemos is a live streaming site that allows developers to stream themselves working on code of their projects. The episode 75 of the Lately in PHP podcast 75 is the first episode to be streamed using presented by Manuel Lemos and Arturs Sosins as always.

In this episode thei also talked about the PHP proposals for immutable objects, searching for text on the beginning and end of strings, disallowing null object parameters in the get_class call, removing UTF-8 to ISO Latin 1 conversion functions and deprecate bundling PEAR/PECL and replace with composer/pickle.

Listen to the podcast, or watch the hangout video to learn more about these interesting PHP topics.
SitePoint PHPFighting Recruiter Spam with PHP – Proof of Concept (29.9.2016, 17:00 UTC)

Ever since I moved off of Google services (due to quality, not privacy concerns), I'd been looking for the perfect email service. Having tried several, and having been with FastMail for a while now, I came to the realization that there's no such thing. The biggest concern I have with modern email providers, is the fact that they are all quite bad at spam control.

I don't mean the "Nigerian prince" type of spam, which is mostly blocked successfully (unless you're using FastMail - they can't even recognize those) but stuff that I'm really, really not interested in getting. Case in point, recruiter spam.

Illustration of blocked email

In this tutorial, we'll get started with building a custom email processor which can read individual emails, run them through some predefined rules, and act on them. The end result will be very similar to what many providers offer out of the box, but it'll lay the groundwork for more advanced aspects in future posts. Example uses of our app:

  • when recruiter-type keywords are detected, reply to the email with a template response and delete it. This is possible to some extent with rules that most email providers offer, but those aren't very detailed, and usually don't support variables.
  • when companies keep sending you emails even after you unsubscribe or report them for spam (e.g. Ello), the engine should remember these and in the future purge them automatically. Some providers (e.g. FastMail), won't stop a sender from getting into your inbox even after hundreds of spam reports.

This way, we can keep the provider we're used to, but also do some manual improvements their team just didn't know how to do.

In this post, we'll focus on the first use case.

Continue reading %Fighting Recruiter Spam with PHP – Proof of Concept%

PHP: Hypertext PreprocessorPHP 7.1.0 Release Candidate 3 Released (29.9.2016, 00:00 UTC)
The PHP development team announces the immediate availability of PHP 7.1.0 Release Candidate 3. This release is the third release candidate for 7.1.0. All users of PHP are encouraged to test this version carefully, and report any bugs and incompatibilities in the bug tracking system. THIS IS A DEVELOPMENT PREVIEW - DO NOT USE IT IN PRODUCTION! For more information on the new features and other changes, you can read the NEWS file, or the UPGRADING file for a complete list of upgrading notes. These files can also be found in the release archive. For source downloads of PHP 7.1.0 Release Candidate 3 please visit the download page, Windows sources and binaries can be found on The fourth release candidate will be released on the 13th of October. You can also read the full list of planned releases on our wiki. Thank you for helping us make PHP better.
SitePoint PHP9 Hot Tips to Enhance Your Spark Experience (28.9.2016, 16:00 UTC)

A while ago, I wrote about a product I wanted to build, to allow easy remote backups for Pagekit sites. I've been working on it (periodically) since then, and have come across a few interesting bits of advice.

I decided to use Laravel Spark as the foundation for the product, and I thought it would be helpful to share the advice. Whether you're just starting your Spark app, or are in maintenance mode, I think you'll find some of these tips useful!

Laravel Spark Website Splash Screen

1. You don't have to keep all the base files

You may be worried about removing too many of the base files from the standard Spark installation. When I first started, I thought it vital not to change the auth controllers (in app/Http/Controllers/Auth), for fear that it'd break the registration and login system.

Turns out, these files aren't used by Spark. In fact, if you add routes to them, and you try to register/log in, you'll probably just encounter problems. These default auth controllers share the same auth guard (session driver), so logging in through one will make you authenticated through the other.

If, however, you try to register through the non-Spark controllers, your user and team accounts will be missing vital Spark information. It's cleaner and simpler to just delete these auxiliary auth controllers.

If you're unsure, make a full backup. Then you can roll back in case your tests pick up any regressions.

2. Use simple repositories

Spark includes a few simple repositories. These are like static config lists (for countries and other mostly-static data), but they can be loaded through the IoC container. They look like this:

namespace Laravel\Spark\Repositories\Geography;

use Laravel\Spark\Contracts\Repositories\↩
    Geography\CountryRepository as Contract;

class CountryRepository implements Contract
     * {@inheritdoc}
    public function all()
        return [
            'AF' => 'Afghanistan',
            'AX' => 'Åland Islands',
            'AL' => 'Albania',
            // ...snip
            'YE' => 'Yemen',
            'ZM' => 'Zambia',
            'ZW' => 'Zimbabwe',

This is from vendor/bin/laravel/spark/src/Repositories/Geography/CountryRepository.php

We can see instances of this being used in some of the registration views:

This is from resources/views/vendor/spark/auth/register-address.blade.php

I highly recommend you use these repositories for country and state data. I also recommend you use this repository style for your own lists:

namespace App\Repositories;

use DateTimeZone;

class TimezoneRepository
     * @return array
    public function get()
        $identifiers = DateTimeZone::listIdentifiers(DateTimeZone::ALL);

        return array_combine(
            array_map(function ($identifier) {
                return str_replace("_", " ", $identifier);
            }, $identifiers)

You don't have to make an interface for each repository. In fact, I think that's a bit of an overkill. But I think these tiny repositories are much cleaner and easier to use than the alternatives.

In addition, you can alias these in an application service provider:

Continue reading %9 Hot Tips to Enhance Your Spark Experience%

Nomad PHPRFCs of the Future: Tick Talk (28.9.2016, 14:42 UTC)

Speaker: Cal Evans @calevans Signal handling in PHP is one of those things that not a lot of people understand, so they don’t bother with. However, if you are writing command line scripts, signal handing is your friend. In PHP 7.1, it gets even easier thanks to changes made in the engine. This short video …

The post RFCs of the Future: Tick Talk appeared first on Nomad PHP.

Nomad PHPBuilding for the PHP Command LineInterface (28.9.2016, 13:46 UTC)

December 2016 - EU
Presented By

Steve Grunwell
December 15, 2016
20:00 CET

The post Building for the PHP Command Line
appeared first on Nomad PHP.

PHP ClassesHow to Calculate VAT in PHP for any EU Country (28.9.2016, 06:36 UTC)
By Dave Smith
As you may know, VAT is a tax used in European Union countries. It is added to the price of products and services, but the actual percentage of the tax varies from country to country, as well from product to product or service to service.

If you or your clients need to add value-added taxes (VAT) within the European Union or validate VAT numbers, then there is a service available to get the latest rates for each country including rates within reduced rate categories.

You can also use the service to calculate VAT compliant prices for you, or reverse the calculation to get an amount without VAT if it has already been included.

Read this article to learn more about how you can use this service to help determine the VAT taxes to use on different purchases using PHP applications.
SitePoint PHPSingle-File Symfony Apps? Yes, with MicroKernelTrait! (27.9.2016, 16:00 UTC)

A Single Page Application (SPA) offers a desktop experience to users of a web application by loading a single HTML page, and dynamically updating it as required without reloading. However, a Symfony application may have hundreds of classes, and in a basic application we end up with lots of files we don't really need.

Illustration of a programmer holding up an elephant

The latest versions of Symfony (2.8 and 3.0) introduce us to the concept of a Single File Application (SFA) - a super-slim application or micro-framework implemented in one file.

To follow along, you need to have a running web server and have your way of running web applications locally. See Laravel Valet article for a quick way of setting up a local development environment that doesn't require configuring a web server, virtual hosts and mucking about with a hosts file. Another option is our trusty Homestead Improved for a ready-to-go experience.

Step 1: Install Barebones Symfony

We are going to install Symfony with Composer as it allows us install only the main package. Create a folder where you usually have your web applications and let's call it sfa. I've got mine under ~/Sites/sfa. In it, we install Symfony:

composer require symfony/symfony

Now, create 2 folders inside sfa and name them app and web.

Step 2: The Front Controller

Inside sfa/web we will house our front controller - a file that receives all requests to the application, passes it to the right place for processing and returns the response to the client that made the request.

You can call this file anything, but you need to make sure your web server has been configured to find it in the correct place. Laravel has public/index.php, Drupal 8 has index.php, and Symfony has web/app_dev.php (during development) and web/app.php (during production). Since this is a Symfony application, let's call ours app_dev.php:


use Symfony\Component\HttpFoundation\Request;

require __DIR__.'/../vendor/autoload.php';
require __DIR__ . '/../app/SfaKernel.php';

$kernel = new SfaKernel('dev', true);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$kernel->terminate($request, $response);

Two small differences between this file and a vanilla Symfony 3 installation.

Firstly, our kernel class is going to be in app/SfaKernel.php. Nothing stops us from calling it Kernel.php, but we want something different. Secondly, we opt not to call the loadClassCache() method. Our application is a slim one, without a good number of classes from a standard installation, so we can leave that method out for now.

Even though we're talking about a single file app, you'll notice it's not really a single file - we do have a front controller and a mini-kernel which does all the heavy lifting. That's in addition to all the other classes loaded from vendor. However, for all intents and purposes, starting and running a Symfony app from a single Kernel file can be regarded as a single file application.

Continue reading %Single-File Symfony Apps? Yes, with MicroKernelTrait!%

Voices of the ElePHPantInterview with Jeff Geerling (27.9.2016, 10:00 UTC) Link
Stefan KoopmanschapWin a FREE PHPNW ticket (26.9.2016, 18:00 UTC)

I've said it before and I'll say it again: PHPNW conference, every first weekend of October in Manchester, is the best PHP conference I've ever been to. I buy my ticket blindly as soon as they go on sale every year. I've been accepted to speak very regularly in previous years and then raffle off my ticket. I was not expecting to need to do that this year, since I did not get accepted to speak. I was looking forward to experience PHPNW as a delegate this year.

Things have changed though. Unfortunately one of the speakers had to cancel their speaking and I've been asked to be the replacement. Of course I said YES! Speaking at PHPNW is a fantastic experience, and I'll gladly help them in a situation like this. But this also means that I don't need my ticket anymore.

This means, however, that I have a spare ticket. As it has become a tradition by now to raffle my conference ticket once accepted as a speaker, I'm again raffling my PHPNW ticket. The ticket has full access to all events of the main conference, including the hackathon on Friday, the social on Saturday and the Sunday conference day. The only thing is: The conference is THIS WEEKEND!

So: If you want to win my ticket, the only thing you need to do is send me an e-mail: Please only send an e-mail if you can actually make it this weekend. On Wednesday I'll do a random draw of the winner and send them an e-mail.

PHPNW will be awesome again. See you in Manchester!

LinksRSS 0.92   RDF 1.
Atom Feed   100% Popoon
PHP5 powered   PEAR
ButtonsPlanet PHP   Planet PHP
Planet PHP