Bài 13: Tạo Bảng Settings, Tạo Màn Hình Thêm Setting, Tạo Dữ Liệu Setting

Bài 13: Tạo Bảng Settings, Tạo Màn Hình Thêm Setting, Tạo Dữ Liệu Setting

  

-    Vào web.php
<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/admin', 'AdminController@loginAdmin');
Route::post('/admin', 'AdminController@postloginAdmin');

Route::get('/home', function () {
return view('home');
});

Route::prefix('admin')->group(function () {
//category
Route::prefix('categories')->group(function () {
Route::get('/',[
'as'=> 'categories.index',
'uses' => 'CategoryController@index'
]);

Route::get('/create',[
'as'=> 'categories.create',
'uses' => 'CategoryController@create'
]);
Route::post('/store',[
'as'=> 'categories.store',
'uses' => 'CategoryController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'categories.edit',
'uses' => 'CategoryController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'categories.update',
'uses' => 'CategoryController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'categories.delete',
'uses' => 'CategoryController@delete'
]);
});
//menu
Route::prefix('menus')->group(function () {
Route::get('/',[
'as'=> 'menus.index',
'uses' => 'MenuController@index'
]);
Route::get('/create',[
'as'=> 'menus.create',
'uses' => 'MenuController@create'
]);
Route::post('/store',[
'as'=> 'menus.store',
'uses' => 'MenuController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'menus.edit',
'uses' => 'MenuController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'menus.update',
'uses' => 'MenuController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'menus.delete',
'uses' => 'MenuController@delete'
]);
});

//Product
Route::prefix('product')->group(function () {
Route::get('/',[
'as'=> 'product.index',
'uses' => 'AdminProductController@index'
]);
Route::get('/create',[
'as'=> 'product.create',
'uses' => 'AdminProductController@create'
]);
Route::post('/store',[
'as'=> 'product.store',
'uses' => 'AdminProductController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'product.edit',
'uses' => 'AdminProductController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'product.update',
'uses' => 'AdminProductController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'product.delete',
'uses' => 'AdminProductController@delete'
]);
});

//Slider
Route::prefix('slider')->group(function () {
Route::get('/',[
'as'=> 'slider.index',
'uses' => 'SliderAdminController@index'
]);
Route::get('/create',[
'as'=> 'slider.create',
'uses' => 'SliderAdminController@create'
]);
Route::post('/store',[
'as'=> 'slider.store',
'uses' => 'SliderAdminController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'slider.edit',
'uses' => 'SliderAdminController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'slider.update',
'uses' => 'SliderAdminController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'slider.delete',
'uses' => 'SliderAdminController@delete'
]);
});

//Settings
Route::prefix('settings')->group(function () {
Route::get('/',[
'as'=> 'settings.index',
'uses' => 'AdminSettingController@index'
]);

})
;
});


-    Vào resource => admin => partials => siderbar.blade.php
<!-- Main Sidebar Container -->
<aside class="main-sidebar sidebar-dark-primary elevation-4">
<!-- Brand Logo -->
<a href="index3.html" class="brand-link">
<img src="{{asset('adminlte/dist/img/AdminLTELogo.png')}}" alt="AdminLTE Logo" class="brand-image img-circle elevation-3" style="opacity: .8">
<span class="brand-text font-weight-light">AdminLTE 3</span>
</a>

<!-- Sidebar -->
<div class="sidebar">
<!-- Sidebar user panel (optional) -->
<div class="user-panel mt-3 pb-3 mb-3 d-flex">
<div class="image">
<img src="{{ asset('adminlte/dist/img/user2-160x160.jpg') }}" class="img-circle elevation-2" alt="User Image">
</div>
<div class="info">
<a href="#" class="d-block">Alexander Pierce</a>
</div>
</div>

<!-- SidebarSearch Form -->
<div class="form-inline">
<div class="input-group" data-widget="sidebar-search">
<input class="form-control form-control-sidebar" type="search" placeholder="Search" aria-label="Search">
<div class="input-group-append">
<button class="btn btn-sidebar">
<i class="fas fa-search fa-fw"></i>
</button>
</div>
</div>
</div>

<!-- Sidebar Menu -->
<nav class="mt-2">
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
<!-- Add icons to the links using the .nav-icon class
with font-awesome or any other icon font library -->

<li class="nav-item">
<a href="{{ route('categories.index') }}" class="nav-link">
<i class="nav-icon fas fa-th"></i>
<p>
Danh mc sn phm
<span class="right badge badge-danger">New</span>
</p>
</a>
</li>

<li class="nav-item">
<a href="{{ route('menus.index') }}" class="nav-link">
<i class="nav-icon fas fa-th"></i>
<p>
Menus
</p>
</a>
</li>

<li class="nav-item">
<a href="{{ route('product.index') }}" class="nav-link">
<i class="nav-icon fas fa-th"></i>
<p>
Sn phm
</p>
</a>
</li>

<li class="nav-item">
<a href="{{route('slider.index')}}" class="nav-link">
<i class="nav-icon fas fa-th"></i>
<p>
Slider
</p>
</a>
</li>

<li class="nav-item">
<a href="{{route('settings.index')}}" class="nav-link">
<i class="nav-icon fas fa-th"></i>
<p>
Settings
</p>
</a>
</li>

</ul>
</nav>
<!-- /.sidebar-menu -->
</div>
<!-- /.sidebar -->
</aside>
-    Vào terminal chạy lệnh : php artisan make:controller AdminSettingController
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AdminSettingController extends Controller
{
public function index()
{
return view('admin.setting.index');
}
}

-     Vào resource => admin => tạo foder setting => tạo file index.blade.php
<!-- Stored in resources/views/child.blade.php -->

@extends('layouts.admin')

@section('title')
<title>Setting</title>
@endsection

@section('content')
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
<!-- Content Header (Page header) -->
@include('partials.content-header',['name'=>'settings', 'key'=>'List'])
<!-- /.content-header -->

<!-- Main content -->
<div class="content">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<a href="" class="btn btn-success float-right mr-2">add</a>
</div>
<div class="col-md-12">
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Config key</th>
<th scope="col">Config value</th>
<th scope="col">Action</th>
</tr>
</thead>
<tbody>

{{-- @foreach($menus as $menu)--}}

<tr>
<th scope="row">1</th>
<td>config key</td>
<td>config value</td>
<td>
<a href=""
class="btn btn-default">Edit</a>
<a href=""
class="btn btn-danger">Delete</a>
</td>
</tr>
{{-- @endforeach--}}
</tbody>
</table>
</div>
<div class="col-md-12">
{{-- {{ $menus->links() }}--}}
</div>

</div>
<!-- /.row -->
</div>
<!-- /.container-fluid -->
</div>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
@endsection
-    Vào terminal chạy lệnh : php artisan make:model Setting -m
-    Vào file 2021_07_22_073342_create_settings_table.php
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateSettingsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('settings', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('config_key');
$table->text('config_value');
$table->timestamps();
})
;
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('settings');
}
}
-    Vào terminal chạy lệnh : php artisan migrate
-    Trong navicat:
-    Kết quả :

Tạo Màn Hình Thêm Setting

-    Vào web.php
<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/admin', 'AdminController@loginAdmin');
Route::post('/admin', 'AdminController@postloginAdmin');

Route::get('/home', function () {
return view('home');
});

Route::prefix('admin')->group(function () {
//category
Route::prefix('categories')->group(function () {
Route::get('/',[
'as'=> 'categories.index',
'uses' => 'CategoryController@index'
]);

Route::get('/create',[
'as'=> 'categories.create',
'uses' => 'CategoryController@create'
]);
Route::post('/store',[
'as'=> 'categories.store',
'uses' => 'CategoryController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'categories.edit',
'uses' => 'CategoryController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'categories.update',
'uses' => 'CategoryController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'categories.delete',
'uses' => 'CategoryController@delete'
]);
});
//menu
Route::prefix('menus')->group(function () {
Route::get('/',[
'as'=> 'menus.index',
'uses' => 'MenuController@index'
]);
Route::get('/create',[
'as'=> 'menus.create',
'uses' => 'MenuController@create'
]);
Route::post('/store',[
'as'=> 'menus.store',
'uses' => 'MenuController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'menus.edit',
'uses' => 'MenuController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'menus.update',
'uses' => 'MenuController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'menus.delete',
'uses' => 'MenuController@delete'
]);
});

//Product
Route::prefix('product')->group(function () {
Route::get('/',[
'as'=> 'product.index',
'uses' => 'AdminProductController@index'
]);
Route::get('/create',[
'as'=> 'product.create',
'uses' => 'AdminProductController@create'
]);
Route::post('/store',[
'as'=> 'product.store',
'uses' => 'AdminProductController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'product.edit',
'uses' => 'AdminProductController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'product.update',
'uses' => 'AdminProductController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'product.delete',
'uses' => 'AdminProductController@delete'
]);
});

//Slider
Route::prefix('slider')->group(function () {
Route::get('/',[
'as'=> 'slider.index',
'uses' => 'SliderAdminController@index'
]);
Route::get('/create',[
'as'=> 'slider.create',
'uses' => 'SliderAdminController@create'
]);
Route::post('/store',[
'as'=> 'slider.store',
'uses' => 'SliderAdminController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'slider.edit',
'uses' => 'SliderAdminController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'slider.update',
'uses' => 'SliderAdminController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'slider.delete',
'uses' => 'SliderAdminController@delete'
]);
});

//Settings
Route::prefix('settings')->group(function () {
Route::get('/',[
'as'=> 'settings.index',
'uses' => 'AdminSettingController@index'
]);
Route::get('/create',[
'as'=> 'settings.create',
'uses' => 'AdminSettingController@create'
])
;

});
});
-    Vào AdminSettingController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AdminSettingController extends Controller
{
public function index()
{
return view('admin.setting.index');
}
public function create(){
return view('admin.setting.add');
}
}
-     Vào resource => admin =>  setting => tạo file add.blade.php
<!-- Stored in resources/views/child.blade.php -->

@extends('layouts.admin')

@section('title')
<title>Setting</title>
@endsection

@section('content')
<div class="content-wrapper">
@include('partials.content-header',['name'=>'settings', 'key'=>'Add'])

<div class="content">
<div class="container-fluid">
<div class="row">
<div class="col-md-6">
<form action="" method="post">
@csrf
<div class="form-group">
<label>Config key</label>
<input class="form-control"
name="config_key"
placeholder="Nhp config key">
</div>
@if(request()->type === 'Text')
<div class="form-group">
<label>Config name</label>
<input type="text"
class="form-control"
name="config_value"
placeholder="Nhp config value">
</div>
@elseif(request()->type === 'Textarea')
<div class="form-group">
<label>Config name</label>
<textarea class="form-control"
name="config_value"
placeholder="Nhp config value"
rows="5"
></textarea>
</div>
@endif
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>

</div>
</div>
</div>
</div>
@endsection
-     Vào resource => admin =>  setting =>index.blade.php
<!-- Stored in resources/views/child.blade.php -->

@extends('layouts.admin')

@section('title')
<title>Setting</title>
@endsection

@section('css')
<link rel="stylesheet" href="{{ asset('admins/setting/index/index.css') }}">
@endsection

@section('content')
<div class="content-wrapper">
@include('partials.content-header',['name'=>'settings', 'key'=>'List'])
<div class="content">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<div class="btn-group float-right">
<a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
Add setting
<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li><a href="{{route('settings.create') .'?type=Text'}}">Text</a></li>
<li><a href="{{route('settings.create') .'?type=Textarea'}}">Textarea</a></li>
</ul>
</div>
</div>
<div class="col-md-12">
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Config key</th>
<th scope="col">Config value</th>
<th scope="col">Action</th>
</tr>
</thead>
<tbody>

{{-- @foreach($menus as $menu)--}}

<tr>
<th scope="row">1</th>
<td>config key</td>
<td>config value</td>
<td>
<a href=""
class="btn btn-default">Edit</a>
<a href=""
class="btn btn-danger">Delete</a>
</td>
</tr>
{{-- @endforeach--}}
</tbody>
</table>
</div>
<div class="col-md-12">
{{-- {{ $menus->links() }}--}}
</div>
</div>
</div>
</div>
</div>
@endsection


-    Vào public => admins => tạo foder setting => tạo foder index => tạo file  index.css
.dropdown-menu > li > a {
display: block;
padding: 3px 20px;
clear: both;
font-weight: normal;
line-height: 20px;
color: #333333;
white-space: nowrap;
}
.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus, .dropdown-submenu:hover > a, .dropdown-submenu:focus > a {
color: #ffffff;
text-decoration: none;
background-color: #0081c2;
background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
background-image: -o-linear-gradient(top, #0088cc, #0077b3);
background-image: linear-gradient(to bottom, #0088cc, #0077b3);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);
}
.btn-group{
padding-right: 100px;
}
-    Kết quả :

Tạo Dữ Liệu Setting

-    Vào terminal : php artisan make:request AddSettingRequest
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class AddSettingRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'config_key' => 'required|unique:settings|max:255|min:5',
'config_value' => 'required',

];
}

public function messages()
{
return [
'config_key.required' => 'config_key không được phép đ trng',
'config_key.unique' => 'config_key không được phép trùng',
'config_key.max' => 'config_key không được phép vượt quá 255 ký t',
'config_key.min' => 'config_key không được phép dưới 5 ký t',
'config_value.required' => 'config_value không được đ trng',
];
}
}
-    Vào AdminSettingController.php
<?php

namespace App\Http\Controllers;

use App\Http\Requests\AddSettingRequest;
use App\Setting;
use Illuminate\Http\Request;

class AdminSettingController extends Controller
{
private $setting;
public function __construct(Setting $setting)
{
$this->setting = $setting;
}
public function index()
{
return view('admin.setting.index');
}
public function create(){
return view('admin.setting.add');
}
public function store(AddSettingRequest $request)
{
$this->setting->create([
'config_key'=>$request->config_key,
'config_value'=>$request->config_value,
]);
return redirect()->route('settings.index');
}
}
-    Vào Setting.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Setting extends Model
{
protected $guarded = [];
}
-    Vào web.php
<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/admin', 'AdminController@loginAdmin');
Route::post('/admin', 'AdminController@postloginAdmin');

Route::get('/home', function () {
return view('home');
});

Route::prefix('admin')->group(function () {
//category
Route::prefix('categories')->group(function () {
Route::get('/',[
'as'=> 'categories.index',
'uses' => 'CategoryController@index'
]);

Route::get('/create',[
'as'=> 'categories.create',
'uses' => 'CategoryController@create'
]);
Route::post('/store',[
'as'=> 'categories.store',
'uses' => 'CategoryController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'categories.edit',
'uses' => 'CategoryController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'categories.update',
'uses' => 'CategoryController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'categories.delete',
'uses' => 'CategoryController@delete'
]);
});
//menu
Route::prefix('menus')->group(function () {
Route::get('/',[
'as'=> 'menus.index',
'uses' => 'MenuController@index'
]);
Route::get('/create',[
'as'=> 'menus.create',
'uses' => 'MenuController@create'
]);
Route::post('/store',[
'as'=> 'menus.store',
'uses' => 'MenuController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'menus.edit',
'uses' => 'MenuController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'menus.update',
'uses' => 'MenuController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'menus.delete',
'uses' => 'MenuController@delete'
]);
});

//Product
Route::prefix('product')->group(function () {
Route::get('/',[
'as'=> 'product.index',
'uses' => 'AdminProductController@index'
]);
Route::get('/create',[
'as'=> 'product.create',
'uses' => 'AdminProductController@create'
]);
Route::post('/store',[
'as'=> 'product.store',
'uses' => 'AdminProductController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'product.edit',
'uses' => 'AdminProductController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'product.update',
'uses' => 'AdminProductController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'product.delete',
'uses' => 'AdminProductController@delete'
]);
});

//Slider
Route::prefix('slider')->group(function () {
Route::get('/',[
'as'=> 'slider.index',
'uses' => 'SliderAdminController@index'
]);
Route::get('/create',[
'as'=> 'slider.create',
'uses' => 'SliderAdminController@create'
]);
Route::post('/store',[
'as'=> 'slider.store',
'uses' => 'SliderAdminController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'slider.edit',
'uses' => 'SliderAdminController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'slider.update',
'uses' => 'SliderAdminController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'slider.delete',
'uses' => 'SliderAdminController@delete'
]);
});

//Settings
Route::prefix('settings')->group(function () {
Route::get('/',[
'as'=> 'settings.index',
'uses' => 'AdminSettingController@index'
]);
Route::get('/create',[
'as'=> 'settings.create',
'uses' => 'AdminSettingController@create'
]);
Route::post('/store',[
'as'=> 'settings.store',
'uses' => 'AdminSettingController@store'
]);
})
;
});


-     Vào resource => admin =>  setting =>  add.blade.php
<!-- Stored in resources/views/child.blade.php -->

@extends('layouts.admin')

@section('title')
<title>Setting</title>
@endsection

@section('css')
<link rel="stylesheet" href="{{asset('admins/setting/add/add.css')}}">
@endsection

@section('content')
<div class="content-wrapper">
@include('partials.content-header',['name'=>'settings', 'key'=>'Add'])
<div class="content">
<div class="container-fluid">
<div class="row">
<div class="col-md-6">
<form action="{{ route('settings.store') }}" method="post">
@csrf
<div class="form-group">
<label>Config key</label>
<input class="form-control @error('config_key') is-invalid @enderror"
name="config_key"
placeholder="Nhp config key">
@error('config_key')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
</div>
@if(request()->type === 'Text')
<div class="form-group">
<label>Config value</label>
<input type="text"
class="form-control @error('config_value') is-invalid @enderror"
name="config_value"
placeholder="Nhp config value">
@error('config_value')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
</div>
@elseif(request()->type === 'Textarea')
<div class="form-group">
<label>Config value</label>
<textarea class="form-control @error('config_value') is-invalid @enderror"
name="config_value"
placeholder="Nhp config value"
rows="5">
</textarea>
@error('config_value')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
</div>
@endif
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>

</div>
</div>
</div>
</div>
@endsection
-    Vào public => admins => setting => tạo foder add => tạo file add.css
.alert-danger{
margin-top: 10px;
padding: 3px 5px;
}
.image_slider{
width: 100%;
height: 130px;
margin-top: 10px;
object-fit: cover;
}


Đăng nhận xét

0 Nhận xét

myadcash