PHPackages                             slexx/laravel-actions - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. slexx/laravel-actions

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

slexx/laravel-actions
=====================

Actions for laravel

v1.3.3(6y ago)71181MITPHP

Since Feb 7Pushed 6y agoCompare

[ Source](https://github.com/slexx1234/laravel-actions)[ Packagist](https://packagist.org/packages/slexx/laravel-actions)[ RSS](/packages/slexx-laravel-actions/feed)WikiDiscussions master Synced 2mo ago

READMEChangelogDependencies (2)Versions (10)Used By (0)

laravel-action [Русский](https://github.com/slexx1234/laravel-actions/blob/master/RU.md)
========================================================================================

[](#laravel-action-русский)

Usage
-----

[](#usage)

### Problem

[](#problem)

Most applications have multiple entry points. For example, a form for creating a user, an API for a mobile application, and there may even be a command for creating users.

Then there is the problem of repeating pieces of code.

```
class UserController
{
    public function create(CreateUserRequest $request)
    {
        $user = new User;
        $user->email = $request->email;
        $user->password = bcrypt($request->password);
        $user->save();

        return redirect('users/' . $user->id);
    }
}

class UserApiController
{
    public function create(CreateUserRequest $request)
    {
        $user = new User;
        $user->email = $request->email;
        $user->password = bcrypt($request->password);
        $user->save();

        return new UserResponse($user);
    }
}
```

### Solution

[](#solution)

I recently discovered an elegant solution to this problem by reading an article on [medium](https://medium.com/@remi_collin/keeping-your-laravel-applications-dry-with-single-action-classes-6a950ec54d1d).

Repetition is removed by adding new class:

```
class UserCreateAction
{
    public function execute(CreateUserRequest $request): User
    {
        $user = new User;
        $user->email = $request->email;
        $user->password = bcrypt($request->password);
        $user->save();

        return $user;
    }
}

class UserController
{
    public function create(CreateUserRequest $request, CreateUserAction $action)
    {
        return redirect('users/' . $action->execute($request)->id);
    }
}

class UserApiController
{
    public function create(CreateUserRequest $request)
    {
        return new UserResponse($action->execute($request));
    }
}
```

### So what does the package do?

[](#so-what-does-the-package-do)

It adds one irreplaceable command `make:action`!

```
php artisan make:action Users/CreateUserAction

```

This generates the following code:

```
