Laravel Google Translate

Laravel Google Translate is a package that provides an artisan console command to translate your localization files with the Google translation API. You can either leverage stichoza/google-translate-php without an API key or configure your Google Translate API key.

The console command php artisan translate:files walks you through some prompts to determine how to proceed with your translations files:

Future goals of this package include handling vendor translations, a web interface, and adding other translation APIs such as Yandex, Bing, etc.

You can learn more about this package, get full installation instructions, and view the source code on GitHub at tanmuhittin/laravel-google-translate.

Junges Laravel ACL

Junges Laravel ACL is a package by Mateus Junges that helps you to associate users with permissions and permission groups.

This package stores permissions for users and groups (to which users may belong) in the database with the following core features:

  • Check a user for ACL permissions
  • Sync a user’s permissions
  • Sync a group’s permissions
  • Check permissions in the view layer with @can or provided custom directives

At the heart of this package is the UserTrait:

use Illuminate\Foundation\Auth\User as Authenticatable;
use Junges\ACL\Traits\UsersTrait;

class User extends Authenticatable
{
    use UserTrait;

    // 
}

You can sync user and group permissions with the syncPermissions() method:

// With permission id array:
$user->syncPermissions([1, 2, 4]);

// With permission slugs array:
$user->syncPermissions(['permission-slug-1', 'permission-slug-2']);

// With instance of permission model arrays:
$user->syncPermissions([Permission::find(1), Permission::find(2)]);

// Just as above you can sync group permissions. Here's the id version:
$group->syncPermissions([1, 2, 4]);

Check out the usage documentation for a complete list of methods and package capabilities. You can learn more about this package and check out the source code on GitHub at mateusjunges/laravel-acl.

Laravel Search String

Laravel Search String is a package by Loris Leiva that generates database queries based on one unique string using a simple and customizable syntax.

Laravel Search String provides a simple solution for scoping your database queries using a human-readable and customizable syntax. It will transform a simple string into a powerful query builder.

Here’s a nice visual example of what this all means taken from the project’s readme:

Here’s a brief code example that is taken from the readme using the search string and the equivalent query builder:

Article::usingSearchString('title:"My blog article" or not published sort:-created_at');

// Equivalent to:
Article::where('title', 'My blog article')
       ->orWhere('published', false)
       ->orderBy('created_at', 'desc');

Check out the documentation for full details on the extensive search syntax and all the customizations you can make. You can learn more about this package and check out the source code on GitHub at lorisleiva/laravel-search-string.

Eloquent Cloner Package

Cloner is a trait for Laravel Eloquent models that lets you clone a model, and it’s relationships, including files. Even to another database.

Here’s a basic example of a model using the Cloneable trait:

class Article extends Eloquent
{
    use \Bkwld\Cloner\Cloneable;
}

Here’s how you can clone a model instance, even to another database:

$clone = Article::first()->duplicate();

// Cloned to another database by connection name
$clone = Article::first()->duplicateTo('production');

A more advanced example includes defining which relationships cloned along with the model:

class Article extends Eloquent
{
    use \Bkwld\Cloner\Cloneable;

    protected $cloneable_relations = ['photos', 'authors'];

    public function photos() {
        return $this->hasMany('Photo');
    }

    public function authors() {
        return $this->belongsToMany('Author');
    }
}

Check out the documentation for full details on how you can also define how to clone files attached to a model. You can learn more about this app and check out the source code on GitHub at BKWLD/cloner.

Laravel Blade Filters Package

Blade Filters is a package by Gergo D. Nagy that adds the concept of filters to your blade templates. If you’re familiar with Django’s templating system or Symfony’s Twig templating language, the concept of a filter looks like this:

{{ 'john' | ucfirst }} // John

Alternatively, you could write the same thing like this in Blade without the concept of filters:

{{ ucfirst('john') }}

Chained usage is where I personally feel filters begin to shine over function calls:

{{ 'john' | ucfirst | substr:0,1 }} // J

{{ substr(ucfirst('john'), 0, 1) }}

More usefully, here’s how you’d use filters with a template variable:

{{ $currentUser->name | ucfirst | substr:0,1 }}

Finally, this package provides filters that leverage built-in Laravel APIs:

{{ 'This is a title' | slug }} // this-is-a-title

{{ 'This is a title' | title }} // This Is A Title

{{ 'foo_bar' | studly }} // FooBar

To learn more about this package—including installation instructions—check out the source code on GitHub at thepinecode/blade-filters. Also, the package author Gergo wrote a detailed article that explains how to build a custom ViewServiceProvider that you should check out!

MailEclipse: Laravel Mail Editor Package

MailEclipse is a mailable editor package for your Laravel applications to create and manage mailables using a web UI. You can use this package to develop mailables without using the command line, and edit templates associated with mailables using a WYSIWYG editor, among other features.

You can even edit your markdown mailable templates:

When creating a mailable template, you can pick from existing themes provided by this package:

The best way to get an idea of what this package does is to install it and try it out or check out this five-minute demo from the author:

Note: the video doesn’t provide sound, but does give an excellent overview and demo of MailEclipse features.

At the time of writing this package is a work in progress and under active development. Part of being under active development means that if you’re interested, you’re encouraged to try this package out and provide feedback.

To start using this package, check out the source code and readme at Qoraiche/laravel-mail-editor on GitHub.

Laravel Vouchers

Laravel Vouchers is a package by Marcel Pociot that allows users to redeem vouchers that are bound to models:

This package can associate vouchers with your Eloquent models. This might come in handy, if you need to associate voucher codes with content that is stored in your Eloquent models.

Here’s a basic example of how to create them and redeem them from the readme:

$videoCourse = VideoCourse::find(1);
$voucher = $videoCourse->createVoucher();

auth()->user()->redeemVoucher($voucher);

You can also create vouchers with the Vouchers facade:

$videoCourse = VideoCourse::find(1);

// Create 5 vouchers associated to the videoCourse model.
$vouchers = Vouchers::create($videoCourse, 5);

If you need to provide additional information for your voucher, you can pass an array of key/value data:

$videoCourse = VideoCourse::find(1);

$vouchers = $videoCourse->createVouchers(2, [
    'from' => 'Marcel',
    'message' => 'This one is for you. I hope you like it'
]);

$voucher = $user->redeem('ABC-DEF');
$from = $voucher->data->get('from');
$message = $voucher->data->get('message');

You redeem a voucher with the redeemCode() method:

$voucher = $user->redeemCode('ABCD-EFGH');

// Redeem a Voucher model instance
$user->redeemVoucher($voucher);

To learn more about this package, check out beyondcode/laravel-vouchers on GitHub.

Laravel Postal Code Validation

Postal code validation for multiple countries can always be a pain, but thanks to the Laravel Postal Code Validation package by Choraimy Kroonstuiver, validating postal codes is a breeze:

$this->validate($request, [
    'postal_code' => 'postal_code:NL,BE',
]);

Here’s a fluent version of the rule:

$this->validate($request, [
    'postal_code' => [
        PostalCode::forCountry('NL')->andCountry('BE'),
    ],
]);

This package supports worldwide postal code validation, enabling your forms to support multiple postal codes or single out a specific postal code based on the user’s current locale for example.

As an interesting aside, I recently found this helpful list of regular expressions from the Common Locale Data Repository (CLDR) if you’re interested in regular expression postal code validation rules for every territory in the world. Here’s a Gist of the CLDR regex rules as a PHP array available on GitHub.

To start using this package, check out the source code and readme at axlon/laravel-postal-code-validation on GitHub.

Spatie Laravel Flash Package

Freek Van der Herten of Spatie released a lightweight package to flash messages in your Laravel apps:

This is a lightweight package to send flash messages in Laravel apps. A flash message is a message that is carried over to the next request by storing it in the session. This package only supports one single flash message at a time.

The API is simple to use; from a controller, you might have a flash message like the following:

public function store()
{
    // ...
    flash('The post was updated!', 'some-class');

    return back();
}

You can then use the following to check for/display the message:

@if(flash()->message)
    <div class="{{ flash()->class }}">
        {{ flash()->message }}
    </div>
@endif

Finally, if you are using something like Bootstrap or need some other way to identify a flash message as an error, success, etc., you can define a map of levels in your AppServiceProvider::boot():

\Spatie\Flash\Flash::levels([
    'success' => 'alert-success',
    'warning' => 'alert-warning',
    'error' => 'alert-error',
]);

With the levels defined, you can set a flash message like this:

flash()->success('The post was updated!');

// Or...

flash('The post was updated!', 'success');

Most Laravel developers are likely familiar with the laracasts/flash package—I use it on most of my projects—which is another excellent option. Spatie’s flash package is a very lightweight package with less features, so both projects are good tools to have in your toolbelt depending on your project’s needs.

To learn more about this package, read Freek’s blog post A Laravel package to flash messages. To start using this package, check out the source code and readme at spatie/laravel-flash on GitHub.

Laravel Personal Data Export

Freek Van der Herten released a Spatie package called Laravel Personal Data Export last week to help you create zip files containing personal data in your Laravel applications:

This package makes it easy to let a user download an export containing all the personal data. Such an export consists of a zip file containing all the user properties and related info.

With privacy concerns rising on social media and other web applications, exporting user data might be something you want to consider. As seen in the package’s readme, you configure the file and data export by defining a selectPersonalData method the user model:

// in your User model

public function selectPersonalData(PersonalDataSelection $personalDataSelection) {
    $personalDataSelection
        ->add('user.json', ['name' => $this->name, 'email' => $this->email])
        ->addFile(storage_path("avatars/{$this->id}.jpg");
        ->addFile('other-user-data.xml', 's3');
}

The Laravel Personal Data Export package provides configuration for how many days the personal data will be available to the user, along with some other customizable options:

return [
    /*
     * The disk where the exports will be stored by default.
     */
    'disk' => 'personal-data-exports',

    /*
     * The amount of days the exports will be available.
     */
    'delete_after_days' => 5,

    /*
     * Determines whether the user should be logged in to be able
     * to access the export.
     */
    'authentication_required' => true,

    /*
     * The mailable which will be sent to the user when the export
     * has been created.
     */
    'mailable' => \Spatie\PersonalDataExport\Mail\PersonalDataExportCreatedMail::class,
];

This package takes care of the boilerplate of all the tasks involved in initiating the data export and then fulfilling it roughly in the following sequence:

First, the package generates the data when you dispatch a CreatePersonalDataExportJob in the application (a queued job by default).

Next, when the job runs, the exported data is zipped and copied to the configured disk. Finally, the user receives a notification email with the URL to the download.

Almost every piece (if not all) of the export process is customizable. You can check out this package on GitHub at spatie/laravel-personal-data-export.