DEV Community

Cover image for how to Generate CRUD in Laravel
Osman Forhad
Osman Forhad

Posted on

how to Generate CRUD in Laravel

Recently I was working with an CRM System where I need to contain long forms with many many fields. So, to manipulate those forms using the classic ways of creating the forms manually is a long-term process.
So, avoid this long-lasting process and to make development easy I decide to use a crud generator to generate from field easily.
For this purpose, I decide to use a widely used package which is appzcoder/crud-generator.
Alt Text
For that the procedure I was done
Installation:
For installation appzcoder/crud-generator i was type
composer require appzcoder/crud-generator --dev on my terminal
After that, publish its assets using the vendor:publish Artisan command.
php artisan vendor:publish --provider="Appzcoder\CrudGenerator\CrudGeneratorServiceProvider"

after the execute this command the package created a configuration file in
config/crudgenerator.php and some other files in resources/crud-generator.

Then I need to modifi config/crudgenerator.php file

Whay I need to modifi curdgenerator.php ?
Basically the curd generator uses the default Laravel layout but i need to update to be sited the current theme so I was modifi like bellow

.....
return [
...
'custom_template' => true,
....
];

Then i was modifi all stub crud file s I need. The stub file is located within resources/crud-generator/views/html/

Generating CRUD View:

Then I was run below command in terminal to generate the views:
php artisan crud:view users --fields="name#string; email#string; position_title#string; phone#string; image#string; parent_id#integer" --view-path="pages" --route-group=admin --form-helper=html --validations="name#required; email#required|email|unique:users,email; password#required"

This command will create the views of (Create, Read, Update, Delete) of the users table in resources/views/pages folder.

create the Users controller using the crud:
php artisan crud:controller UsersController --crud-name=users --model-name=User --view-path="pages" --route-group=admin

This command create a resource controller similar to laravel native command instead it will populate it with code ready. Everything is working fine but i decide modifi some code.
the following modifications to the below files:
The file location is: app/Http/Controllers/UsersController.php

<?php
Enter fullscreen mode Exit fullscreen mode

namespace App\Http\Controllers;

use App\Helpers\MailerFactory;
use App\Http\Requests;

use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class UsersController extends Controller
{
protected $mailer;

public function __construct(MailerFactory $mailer)
{
    $this->middleware('admin', ['except' => ['getProfile', 'getEditProfile', 'postEditProfile']]);

    $this->mailer = $mailer;
}

/**
 * Display a listing of the resource.
 *
 * @return \Illuminate\View\View
 */
public function index(Request $request)
{
    $keyword = $request->get('search');

    $perPage = 25;

    if (!empty($keyword)) {
        $users = User::where('name', 'like', "%$keyword%")->orWhere('email', 'like', "%$keyword%")->paginate($perPage);
    } else {
        $users = User::latest()->paginate($perPage);
    }

    return view('pages.users.index', compact('users'));
}

/**
 * Show the form for creating a new resource.
 *
 * @return \Illuminate\View\View
 */
public function create()
{
    $parents = User::all();

    return view('pages.users.create', compact('parents'));
}

/**
 * Store a newly created resource in storage.
 *
 * @param \Illuminate\Http\Request $request
 *
 * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
 */
public function store(Request $request)
{
    $this->validate($request, [
Enter fullscreen mode Exit fullscreen mode

'name' => 'required',
'email' => 'required|email|unique:users,email',
'password' => 'required',
'image' => 'image|mimes:jpeg,png,jpg,gif'
]);

    $requestData = $request->except(['is_profile', '_token']);

    $requestData['password'] = bcrypt($requestData['password']);

    $requestData['is_active'] = isset($requestData['is_active'])?1:0;

    if ($request->hasFile('image')) {

        checkDirectory("users");

        $requestData['image'] = uploadFile($request, 'image', public_path('uploads/users'));
    }

    if(($count = User::all()->count()) && $count == 0) {

        $requestData['is_admin'] = 1;
    }

    User::create($requestData);

    return redirect('admin/users')->with('flash_message', 'User added!');
}

/**
 * Display the specified resource.
 *
 * @param  int  $id
 *
 * @return \Illuminate\View\View
 */
public function show($id)
{
    $user = User::findOrFail($id);

    return view('pages.users.show', compact('user'));
}

/**
 * Show the form for editing the specified resource.
 *
 * @param  int  $id
 *
 * @return \Illuminate\View\View
 */
public function edit($id)
{
    $user = User::findOrFail($id);

    return view('pages.users.edit', compact('user'));
}

/**
 * Update the specified resource in storage.
 *
 * @param \Illuminate\Http\Request $request
 * @param  int  $id
 *
 * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
 */
public function update(Request $request, $id)
{
    $this->validate($request, [
Enter fullscreen mode Exit fullscreen mode

'name' => 'required',
'email' => 'required|email|unique:users,email,' . $id,
'image' => 'image|mimes:jpeg,png,jpg,gif'
]);

    $requestData = $request->except(['_token']);

    if ($request->hasFile('image')) {
        checkDirectory("users");
        $requestData['image'] = uploadFile($request, 'image', public_path('uploads/users'));
    }

    $user = User::findOrFail($id);

    $old_is_active = $user->is_active;

    if($user->is_admin == 0) {
        $requestData['is_active'] = isset($requestData['is_active']) ? 1 : 0;
    }

    $user->update($requestData);


    // send notification email
    if($user->is_admin == 0 && getSetting("enable_email_notification") == 1 && $requestData['is_active'] != $old_is_active) {

        if($requestData['is_active'] == 1) {
            $subject = "Your mini crm account have been activated";
        } else {
            $subject = "Your mini crm account have been deactivated";
        }

        $this->mailer->sendActivateBannedEmail($subject, $user);
    }

    return redirect('admin/users')->with('flash_message', 'User updated!');
}

/**
 * Remove the specified resource from storage.
 *
 * @param  int  $id
 *
 * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
 */
public function destroy($id)
{
    User::destroy($id);

    return redirect('admin/users')->with('flash_message', 'User deleted!');
}


/**
 * show user profile
 *
 *
 * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
 */
public function getProfile()
{
    $user = User::findOrFail(Auth::user()->id);

    return view('pages.users.profile.view', compact('user'));
}

public function getEditProfile()
{
    $user = User::findOrFail(Auth::user()->id);

    return view('pages.users.profile.edit', compact('user'));
}

public function postEditProfile(Request $request)
{
    $id = Auth::user()->id;

    $this->validate($request, [
        'name' => 'required',
        'email' => 'required|email|unique:users,email,' . $id,
        'image' => 'image|mimes:jpeg,png,jpg,gif'
    ]);

    $requestData = $request->except(['_token']);

    if ($request->hasFile('image')) {
        checkDirectory("users");
        $requestData['image'] = uploadFile($request, 'image', public_path('uploads/users'));
    }

    if(!empty($requestData['password'])) {

        $requestData['password'] = bcrypt($requestData['password']);
    } else {
        unset($requestData['password']);
    }

    $user = User::findOrFail($id);

    $user->update($requestData);

    return redirect('admin/my-profile')->with('flash_message', 'Profile updated!');
}
Enter fullscreen mode Exit fullscreen mode

}
Finally, crud generation successfully done
.
that's it.
.
Happy Coding.
osman forhad
Mobile & Web Application Developer💻

Image of Datadog

The Essential Toolkit for Front-end Developers

Take a user-centric approach to front-end monitoring that evolves alongside increasingly complex frameworks and single-page applications.

Get The Kit

Top comments (1)

Collapse
 
imadaboulhouda profile image
IMAD ABOULHOUDA

You can use my package for crud laravel packagist.org/packages/aboulhouda/...

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay