Laravel is a web application framework with expressive, elegant syntax. Every feature has been thoughtfully considered to provide a wonderful developer experience. Laravel official website
Ensure you have
PHP
andComposer
installed in your computer:
Creating Laravel Project
Create a new Laravel project:
shellcomposer create-project laravel/laravel crud-app cd crud-app
Set Up Database Configuration
Configure your database connection in the .env
file:
envDB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=your_database_name DB_USERNAME=your_database_username DB_PASSWORD=your_database_password
Run Sever
You can run your server with following command:
shellphp artisan serve
Your server might running on http://127.0.0.1:8000/
.
Generate migration:
Laravel's migrations help manage database schemas. You may use the
make:migration
Artisan command to generate a database migration. The new migration will be placed in your/database/migrations
directory.
shellphp artisan make:migration create_posts_table
Define the posts
table in the migration file yyyy_mm_dd_create_posts_table.php
of /database/migrations
directory.
phppublic function up() { Schema::create('posts', function (Blueprint $table) { $table->id(); $table->string('title'); $table->text('content'); $table->timestamps(); }); }
Run the migration command to create the posts
table:
shellphp artisan migrate
Generating Model Class:
You may use the make:model
Artisan command to generate a new model. Models typically live in the app\Models
directory.
shellphp artisan make:model Post
You need to specify which model attributes can be mass assigned. Use the $fillable
property on the app\Models\Post.php
to achieve this.
phpclass Post extends Model { use HasFactory; protected $fillable = ['title', 'content']; }
Creating a Controller
Generate a controller to handle CRUD operations in app/Http/Controllers
by using following command:
shellphp artisan make:controller PostController
Implement CRUD methods index
, create
, store
, edit
, update
, destroy
in PostController.php
.
phpclass PostController extends Controller { public function index(){ $posts = Post::all(); return view('posts.index', ['posts' => $posts]); } public function create(){ return view('posts.create'); } public function store(Request $req){ $data = $req->validate([ 'title' => 'required|max:200', 'content' => 'required' ]); ECHO is off. $data['title'] = addslashes($data['title']); $data['content'] = addslashes($data['content']); ECHO is off. Post::create($data); return redirect(route('posts.index')); } public function edit(Post $post){ return view('posts.edit', ['post' => $post]); } public function update(Post $post, Request $req){ $data = $req->validate([ 'title' => 'required|max:200', 'content' => 'required' ]); ECHO is off. $data['title'] = addslashes($data['title']); $data['content'] = addslashes($data['content']); ECHO is off. $post->update($data); return redirect(route('posts.index')); } public function destroy(Post $post){ $post->delete(); return redirect(route('posts.index')); } }
Creating Routes
Define routes for CRUD operations in routes/web.php
:
phpuse App\Http\Controllers\PostController; Route::get('/', [PostController::class, 'index']) -> name('post.index'); Route::get('/create', [PostController::class, 'create']) -> name('post.create'); Route::post('/store', [PostController::class, 'store']) -> name('post.store'); Route::get('/post/{post}/edit', [PostController::class, 'edit']) -> name('post.edit'); Route::put('/post/{post}/update', [PostController::class, 'update']) -> name('post.update'); Route::delete('/post/{post}', [PostController::class, 'destroy']) -> name('post.destroy');
Implement Views
Create views for posts in (resources/views/posts/
).
plaintextresources/ └── views/ └── posts/ ├── index.blade.php ├── create.blade.php └── edit.blade.php
Here are ways to display your post data as a list in user interface.
blade// index.blade.php @foreach ($posts as $post) <h2>{{ $post->title }}</h2> <p>{{ $post->content }}</p> @endforeach
Using Laravel's form handling to create posts:
blade// create.blade.php <form action="{{ route('posts.store') }}" method="POST"> @csrf @method('post') <input type="text" name="title"> <textarea name="content"></textarea> <button type="submit">Create Post</button> </form>
And now create a new form for handling update posts:
blade// edit.blade.php <form action="{{ route('posts.update') }}" method="POST"> @csrf @method('put') <input type="text" name="title" value={{post->title}}> <textarea name="content">{{post->content}}</textarea> <button type="submit">Update Post</button> </form>
Thank you for reading🐧