Multiple Array Input data Save to Database php (laravel )

View Section

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif
    <form action="{{route('test.store')}}" method="post">
        @csrf
        <input type="text" name="name[]" id="">
        <input type="text" name="email[]" id="">
        <br>
        <input type="text" name="name[]" id="">
        <input type="text" name="email[]" id="">
        <br>
        <input type="text" name="name[]" id="">
        <input type="text" name="email[]" id="">
<br>
        <button type="submit">submit</button>
    </form>
</body>
</html>

Model Section

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Test extends Model
{
    use HasFactory;
    
    protected $guarded = [ "_token" ];
}

Controller Area

<?php

namespace App\Http\Controllers;

use App\Models\Test;
use Illuminate\Http\Request;

class TestController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return view('test');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        // Validate Data
        $validatedData = $request->validate([
            "name.*"  => "required|string|min:1",
        ]);
   $data = $request->except(['_token']);

   for ($i=0; $i < count($data['name']) ; $i++) { 
       $test = new Test;
       foreach($data as $key => $name){
        $test->$key = $data[$key][$i];
       }
       $test->save();

   } 
 





    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\test  $test
     * @return \Illuminate\Http\Response
     */
    public function show(test $test)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\test  $test
     * @return \Illuminate\Http\Response
     */
    public function edit(test $test)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\test  $test
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, test $test)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\test  $test
     * @return \Illuminate\Http\Response
     */
    public function destroy(test $test)
    {
        //
    }
}

লারাভেল কম্পোজার প্যাকেজ ডেভেলপমেন্ট

follow this link link2

  1. ১.লারাভেল এর রুট ডিরেক্টরিতে package নামে একটি ফোল্ডার তৈরী করি।
  2. প্যাকেজ ফোল্ডার এর মধ্যে vendor এর নাম হিসাবে olee নামে একটি ফোল্ডার তৈরী করি
  3. olee ফোল্ডার এর মধ্যে আমরা যে নামে প্যাকেজ তৈরী করবো সে নামে একটি ফোল্ডার তৈরী করি যেমন sociallink .
  4. sociallink ফোল্ডার এর মধ্যে src নামে একটি ফোল্ডার তৈরী করি।
  5. src ফোল্ডার এর মধ্যে cmd ওপেন করে কমান্ড composer init লিখে এন্টার করলে পরবর্তী নির্দেশনা অবলম্বন করলে একটি src ফোল্ডার এ composer.json নামে একটি ফাইল তৈরী হবে
  6. এবার লারাভেল প্রজেক্ট এর রুট ফোল্ডার এ composer.json নামের ফাইলটি ওপেন করে তাতে আমাদের ভেন্ডর প্যাকেজ টি অ্যাড করি।
   
    "autoload": {
        "psr-4": {
            "olee\\items\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
         
            "olee\\items\\": "packages/olee/items/src"
        }
    },
    "extra": {
      
        "olee": {
            "providers": [
                "olee\\items\\ItemsServiceProvider"
            ]
        }
    }
  • এখানে “olee\items হলো ভেন্ডর ও প্যাকেজ এর নাম এই দুইটা আমাদের ভেন্ডর ও নাম অনুযায়ী পরিবর্তন করবো।
  • এবার আমাদের সার্ভিস প্রোভাইডার অ্যাড করতে হবে এজন্য লারাভেল প্রজেক্ট এর রুট ফোল্ডার এ cmd তে কমান্ড রান করি php artisan make:provider SocialLinkServiceProvider
  • এই কমান্ড আমাদের লারাভেল প্রজেক্ট এর app/Providers ফোল্ডার এ SocialLinkServiceProvider নামে একটি ফাইল তৈরী হবে এটাকে আমরা আমাদের প্যাকেজ ফোল্ডার এর src ফোল্ডার মুভ করে নিয়ে এসব এবং ফাইল টি ওপেন করে এর নেমস্পেস চেঞ্জ করবো। namespace olee\sociallink;
  • এবার লারাভেল প্রজেক্ট এর রুট ফোল্ডার এ cmd তে কমান্ড রান করি composer dump-autoload
  • SocialLinkServiceProvider ক্লাসটি প্রজেক্ট এর রুট ডিরেক্টরি তে config/app এ প্রোভাইডার ক্লাস অ্যাড করি   olee\sociallink\SocialLinkServiceProvider::class,
  • src ফোল্ডার এর মধ্যে controllers,views নামে দুইটি ফোল্ডার তৈরী করি।
  • আমাদের প্যাকেজ এর src ফোল্ডার এ composer.json আপডেট করি
{
    "name": "olee/sociallink",
    "description": "Simple Social Link Crud",
    "type": "library",
    "license": "mit",
    "authors": [
        {
            "name": "Olee Ahmmed",
            "email": "oleetechs@gmail.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {},
    "autoload": {
       
        "psr-4": {
            "olee\\sociallink\\": "packages/olee/sociallink/src"
            
        }
    }

}

  • প্যাকেজ এর route ডিফাইন করার জন্য routes.php নামে ফাইল তৈরী করি। এবং তার মধ্যে লিখি
<?php 

use Illuminate\Support\Facades\Route;

  • SocialLinkServiceProvider এর boot এবং রেজিস্টার ফাঙ্কশন এর মধ্যে নিচের মতো হবে।
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        $this->loadViewsFrom(__DIR__.'/views', 'sociallink');    
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        include __DIR__.'/routes.php';

        
    }
  • এবার আমরা কন্ট্রোলার ফাইল তৈরী করবো cmd তে কমান্ড টাইপ করে কন্ট্রোলার তৈরী করি যা app/Controllers ফোল্ডার এ controller.php কপি করে আমাদের প্যাকেজ এর controllers ফোল্ডার এ রাখবো এবং app/Controllers ফোল্ডার এ আমাদের বানানো কন্ট্রোলার টি মুভ করে আমাদের প্যাকেজ এর controllers ফোল্ডার এ রাখবো এবং নেমস্পেস পরিবর্তন করবো আমাদের প্যাকেজ ভেন্ডর নাম অনুসারে
  • controller.php ফাইলের নেমস্পেস হবে এরকম namespace olee\sociallink \Controllers;
  • SocialLinkController.php ফাইলের নেমস্পেস হবে এরকম namespace olee\sociallink \Controllers;
  • এবার আমাদের কন্ট্রোলার টি routes.php তে অ্যাড করবো
use olee\sociallink\Controllers\SocialLink;
Route::get('/posts', [SocialLinkController::class, 'index'])->name('posts.store');
  • Model নিয়ে কাজ করা। কমান্ড এর মাধ্যমে মডেল তৈরী করি যা app/models ফোল্ডার এ একটি মডেল তৈরী করে এবার প্যাকেজ এর src ফোল্ডার এ models নামে ফোল্ডার তৈরী করি এবং কমান্ড দ্বারা বানানো মডেল টি মুভ করে এবার প্যাকেজ এর src ফোল্ডার এ models আন্তে হবে এবং নেমস্পেস পরিবর্তন করি
  • sociallink কন্ট্রোলার ফাইল এ মডেলটি অ্যাড করতে হবে use olee\sociallink\Models\SocialLink;
  • মডেল ফাইলটি হবে এরকম
<?php

namespace olee\sociallink\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class SocialLink extends Model
{
    use HasFactory;
    protected $table = "metal_buttons";
    protected $fillable = ['title ','description'];
}

কন্ট্রোলার ফাইলটি হবে এরকম

<?php

namespace olee\sociallink\Controllers;

use Illuminate\Http\Request;
use olee\sociallink\Models\SocialLink;
class SocialLinkController extends Controller
{
    public function test (){
     $data =  SocialLink::all();  
return $data ;
    }
}

মাইগ্রেশন ফাইল অ্যাড করা : প্রথমে মাইগ্রেশন ফাইল তৈরী করে প্যাকেজ এর src ফোল্ডার এর migrations নামে ফোল্ডার তৈরী করে তারমধ্যে মাইগ্রেশন ফাইল রাখতে এবং সার্ভিস প্রোভাইডার এ বুট ফাঙ্কশন এ অ্যাড করতে হবে এভাবে

<?php

namespace olee\sociallink;

use Illuminate\Support\ServiceProvider;

class SocialLinkServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        $this->loadViewsFrom(__DIR__.'/views', 'sociallink');
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        include __DIR__.'/routes.php';
        $this->loadMigrationsFrom(__DIR__.'/migrations');
    }
}

view ফোল্ডার হতে কন্ট্রোলার এ ভিউ লোড করা:

আমরা ভিউ রেজিস্টার করার সময় সেকেন্ড প্যারামিটার হিসাবে আমাদের ভিউ আইডেন্টিফায়ার হিসাবে items নিয়েছিলাম { $this->loadViewsFrom(DIR.’/views’, ‘items’);
} এবার ভিউ ফোল্ডার এর create.blade.php ফাইল কে কন্ট্রোলার এ এভাবে কল করবো

    public function index()
    {
        return view("items::create");
    }

লারাভেল এর সাথে vuejs নিয়ে কাজ করা

এবার লারাভেল ui ইনস্টল করি। composer require laravel/ui
এবার vuejs ইনস্টল করি। php artisan ui vue –auth
এবার ডিপেন্ডেন্সি ইনস্টল করি। npm install
welcome.blade .php ফাইলটি ফিট করে এরকম করি

@extends('layouts.app')

@section('content')
    <example-component></example-component>
@endsection

passport authenticate কনফিগার করা :

composer require laravel/passport
php artisan migrate
php artisan passport:install

এবার USER.php ফাইল এ নিচের মতো করে কনফিগার করি

<?php

namespace App;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use Notifiable, HasApiTokens;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

এবার app/Providers/AuthServiceProvider.php ফাইলটি ওপেন করে কনফিগার করি

<?php
namespace App\Providers;
use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;


class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
    ];


    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();
    }
}

এবার config/auth.php ফাইল এ কনফিগার করি

'api' => [
                'driver' => 'passport',
                'provider' => 'users',
            ],

মডেল ও ডাটাবেস এ লগইন ইউসার ছাড়া অন্য কেউ যাতে ডাটা এক্সেস না করতে পারে এজন্য মাইগ্রেশন ফাইল ও ইউসার ফাইল এর মাঝে সম্পর্ক করতে হবে মনে করি আমি student নাম একটি মাইগ্রেশন ফাইল একটি মডেল ও একটি কন্ট্রোলার আছে তাহলে এটাকে কনফিগার করতে প্রথমে মাইগ্রেশন ফাইল এ এভাবে রিলেশন করতে হবে।

 $table->id();
             $table->unsignedBigInteger('user_id');
             $table->text('name');
             $table->text('class');
             $table->foreign('user_id')
            ->references('id')->on('users');
            $table->timestamps();

Run Command :php artisan migrate

এরপর user.php ফাইল কে বলে দিতে হবে যে Student ক্লাস এ তোমার পারমিশন লাগবে এজন্য একটি function user.php ফাইল এ লিখতে হবে

// file user.php
public function posts()
{
    return $this->hasMany(Student::class);
}

Laravel Rest Api With Passport Authentication Crud Integrated VUEJS

  • ১. laravel vuejs কন্ফিগার করা।
  • ২. passport প্যাকেজ কনফিগার করা এবং মডেল ফাইল কে কনফিগার করা link
  • ৩.vuejs টেম্পলেট থেকে রিকোয়েস্ট পাঠানো.
<template>
   <div>
       <h2> Contact Us</h2>
       <form v-on:submit.prevent="submitform">
            <div class="form-group">
                <label for="title">Title</label>
                <input type="text" class="form-control" id="title" v-model="form.title"/>
            </div>
           <div class="form-group">
               <label for="description">Description</label>
               <input type="text" class="form-control" id="description" v-model="form.description"/>
           </div>
           <div class="form-group">
               <button type="submit" class="btn btn-info">Submit</button>
           </div>
       </form>
   </div>
</template>
<script>
import axios from 'axios';
export default {
    name:"Insert",
    data(){
        return{
            form:{
                title:"",
                description:""
            }
        }
    },
    methods:{
        submitform(){
            const token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiI5MWIwN2IxNC0zNTQwLTRmYjktYjRhMC0zZDhkNmJiZWZlYzIiLCJqdGkiOiJhM2MyYmYwMzE3MmM5OWIxMWFjZjExOWY0YWQ1N2Q3Mzk4ZjlkNGE5YWMwZjhhMzhlN2Q1NGM1ZmFlMzUwN2RiNjQyMTNiMDM3MWQyYTdmMiIsImlhdCI6MTYwMTk3MDQwMCwibmJmIjoxNjAxOTcwNDAwLCJleHAiOjE2MzM1MDYzOTksInN1YiI6IjE4Iiwic2NvcGVzIjpbXX0.BDfyPe6DV4ty-KAtbj_VcUSdP2s4p2U3-I3o0k4B84NJ1lQF6FabeFjYoTOEQb1sJvP4jf9XdMMtAJt8GMwGcewCfCe5GGhVEX0wXdJmOwNg7Frt97O48nn_05qfPhA4sEaHC365kcSLscxEuWgsXsXj46N2K1Rfu0SvFgDh4fv5iVGmuQP7mTniv-acNeVSZbNVgkm1l1Guyic-3ZvlNJRBNcmA3hQy1cNEjAb_vMnHTFLkBIbj73SMhh83kiDmn3_dFdSrzB6d5umkYEC68voIiBub6dmnL8aighvIIXHo2nFtKbi38Ss7ag2P3B3fKC3NjLBsMeR6stU-5uoiKfCp1CwiBPs1VSWKxNF5hvn5yJ-svNOZknIV2r_VqlEID68OsTTTqD2Q96VO131-TwTNet1VVZHNTi6f9Y2paMrEADXNvTmF2jmy2SLXPKEc0VxODCMZ3-21a7s71CgANR77gUbOy4zGCzH5xNx1tregH4zGNd6cg954dcyVgm_na-2LxTbU7JVc8kQetpIt1Il86dA1fIgKifCGCnJ1yFcHMRtu58_BeeywUIHtfcnq4A9gB6jNv3IDJcvQLEdCOmw81UwCO0yWWmLy1ReeEu_jEVAXUKmXf-FTgmOV-G930ad6yZ_KahlbOYiXAkLKIVW3e5-jGMoO3_PscY60JQY';
            axios.defaults.headers.common['Authorization'] = 'Bearer ' + token;
            axios.get('http://localhost:8000/api/posts',this.form,{
                headers: {
                    'Accept': 'application/json'
                }
            }).then((res) => {
                console.log(res.data);
            }).catch((error) => {

            }).finally(() => {

            });
        }
    }
}
</script>

<style>

</style>

Laravel Practice

Create Project :
composer create-project --prefer-dist laravel/laravel blog
Start Development Server :
php artisan serve
Make Model With Migration :
php artisan make:model Book -m
Model class Coustomization :
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Book extends Model
{
    // define table name
    protected $table = "books";
// define which column fill by data
protected $fillable = ['name'];
    // define primary Key
    protected $primaryKey = 'code';
    // define incrementing primary key
    public $incrementing = false;
    // automatically manage created and updated column 
    public $timestumps = false;

    // $book->date->format('m-d-Y');
    // protected $dateFormate = "U"; 
    protected $dateFormat = 'Y-m-d';

    // change created_at And updated_at column name
    const CREATED_AT = 'creation_date';
    const UPDATED_AT = "modify_date";
    // change database Connection Name to use default connection  no need below line 
    protected $connection = "sqlsrv";

   
//   set default attribute for specific column
protected $attributes = ['country'=>"Bangladesh"] ;

}

Retrieving Data From Models :

Get All Data And Print Data :

// Get All Data From Model And Store In a Variable You Can Pass It Any Where
$books = App\Books::all();
// Print Data 
foreach ($books as $value) {
    echo $value->code;
}

Get Data With Specific Condition And Filtering :
$book = App\Book::where('column','value')->orderBy('code','desc')->take(10)->get();

Get A Fresh And Update Data :

$book = App\Book::where('code',14)->first();
$freshdata = $book->fresh(); // you can use refresh() instant offresh()

Get Number Of Record :

    public function username(){
        $user = User::get()->take(10);
      echo $user;
    }

Delete An Record :

  public function username(){
     $delete = User::where('name','ashik')->delete();
     return  $delete;
    }

বুটস্ট্র্যাপ দিয়ে কিভাবে ওয়েবপেজ ডিজাইন করবো :

প্রথমে বুটস্ট্র্যাপ দিয়ে প্রজেক্ট কনফিগার করার পর আমাদের যে কাজ করতে হবে :

Body : প্রথমে বডির জন্য কালার ও ফন্ট ঠিক করে নিতে হবে :

body{
    background-color: #fff !important;
    font-family: 'Hind Siliguri', sans-serif;
}
ন্যাভিগেশন :
খুব সুন্দর একটি ন্যাভিগেশন নেবো
<nav class="navbar fixed-top navbar-expand-lg navbar-light">
    <div class="container-fluid">
        <a class="navbar-brand" href="http://olee.com"><img class="nav-logo" src="http://olee.com/images/navlogo.svg"/></a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarTogglerDemo02" aria-controls="navbarTogglerDemo02" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navbarTogglerDemo02">
            <ul class="navbar-nav mr-auto mb-2 mb-lg-0">
                <li class="nav-item">
                    <a class="nav-link nav-font" href="http://olee.com">হোম</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link nav-font" href="http://olee.com/blog">ব্লগ</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link nav-font" href="http://olee.com/courses">কোর্স সমূহ</a>
                </li>
            </ul>

        </div>
    </div>
</nav>
.btn{
    border-radius: 0% !important;
}
.btn:focus{
    box-shadow: none;
}
.nav-logo{
    width:100px;
    height:40px;
}
.nav-font{
    font-size: 18px;
    color: #090910!important;
    font-weight: 400;
}
.nav-font:hover{
    color: #FE0A52!important;
}
.navbar{
    background-color: white !important;
    box-shadow: 0 0 4px 0 rgba(240, 240, 240,1);

}

স্মোথ স্ক্রল এর জন্য ন্যাভিগেশন এর পরের অংশকে পরেল্লেক্স ইফেক্ট এর মধ্যে রাখবো।

<style>
.parallax {
  /* The image used */
  background-image: url("img_parallax.jpg");

  /* Set a specific height */
  height: 500px;

  /* Create the parallax scrolling effect */
  background-attachment: fixed;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
}
</style>

<!-- Container element -->
<div class="parallax"></div>

Footer

.footer-section{
    position:relative;
    display:flex;
    flex-direction:column;
    min-width:0;
    word-wrap:break-word;
    background-color:#fff;
    background-clip:border-box;
    border:none;
    border-radius: 0% !important;
    box-shadow: 0 0 4px 0 rgba(240, 240, 240,1)
}
.footer-link {
    text-decoration: none;
    color:  #090910!important;
    font-size:16px;
    font-weight:400;
}
.footer-link:hover {
    text-decoration: none;
    color: #FE0A52!important;
}
/* Turn off parallax scrolling for all tablets and phones. Increase/decrease the pixels if needed */
@media only screen and (max-device-width: 1366px) {
  .parallax {
    background-attachment: scroll;
  }
}

নতুন একটি সেকশন তৈরী করা :

  <div class="container section-margin">
<div class="row ">
    <h6 class="title-text text-center"> ব্লগ পড়ুন <a href="" class="btn btn-sm normal-btn-outline">সবগুলি দেখুন </a></h6>
    <h6 class="des-text text-center mb-4 ">নতুন কিছু জানুন, ভালো লাগলে শেয়ার করুন </h6>
এখানে কনটেন্ট থাকবে 
 </div>
        </div>
.section-margin{
    margin-bottom: 50px;
    margin-top: 50px;
}
.des-text{
    color: #636363!important;
    font-size:14.5px;
    font-weight:300;
}
.title-text{
    color:  #FE0A52 !important;
    font-size:24px;
    font-weight:400;
}

Footer Copyright Area :

<div class="container-fluid custom-bg text-white m-0 text-center p-3">
    <p class="rights-text my-2 ">সর্বস্বত্ব রাব্বিল হাসান দ্বারা সংরক্ষিত; ২০১৯-২০২০ </p>
</div>
.custom-bg{
    background-color: #FE0A52!important;
}

Material Design Input link


Laravel View With Json Value

View Json Value In laravel View :

Controller file :

  public function index()
    {
        //
        $students = Student::get()->toJson(JSON_PRETTY_PRINT);
         // return response($students, 200);
         return view('student.List')->with('students', json_decode($students,true));
    }

View File :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
@foreach($students as $students)
    <tr class="odd pointer">
        <td class=" ">{{$students["id"]}}</td>
        <td class=" ">{{$students["name"]}}</td>
    </tr>
@endforeach
</body>
</html>