1.model层
2.控制层(含图片处理,内容验证)
3.插入信息的页面
4.信息列表页面
5.信息编辑页面
6.在提交页面传递提示信息
补充 ajax删除
<a href="{{url('admin/article/'.$v->art_id.'/edit')}}">修改</a>
<a href="javascript:;" onclick="delArt({{$v->art_id}})">删除</a>
<script>
//删除分类
function delArt(art_id) {
layer.confirm('您确定要删除这篇文章吗?', {
btn: ['确定','取消'] //按钮
}, function(){
$.post("{{url('admin/article/')}}/"+art_id,{'_method':'delete','_token':"{{csrf_token()}}"},function (msg) {
if(msg == 0){
layer.msg('删除失败', {icon: 5});
setTimeout("location.reload()",1000);
//window.location.reload();
}else {
layer.msg('删除成功', {icon: 1});
setTimeout("location.reload()",1000);
//window.location.reload();
}
});
}, function(){
});
}
</script>
1.model层
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Carousel extends Model
{
protected $table = 'anchong_carousel_figure';
protected $primaryKey = 'figure_id';
protected $guarded = [''];
public $timestamps = false;
// 添加内容
public function add($data)
{
$this->fill($data);
if ($this->save()){
return true;
}else{
return false;
}
}
/*
* 编辑信息
*/
public function carouselupdate($id,$data)
{
$num = $this->find($id);
if ($num->update($data)){
return true;
}else{
return false;
}
}
/*
* 删除轮播图
*/
public function del($id)
{
return $this->where('figure_id',$id)->delete();
}
}
?>
2.控制层
<?php
namespace App\Http\Controllers\admin;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Validator,DB;
use Illuminate\Support\Facades\Input;
//轮播图的处理类
class CarouselController extends ConmonController
{
public $carousel;
public function __construct()
{
$this->carousel = new \App\Carousel();
}
// 展示轮播图内容
public function index()
{
// 轮播图
$datas = DB::table('anchong_carousel_figure')->orderBy('figure_id','desc')->paginate(5);
return view('admin.carousel.index',compact('datas'));
}
// 创建轮播图
public function create()
{
return view('admin.carousel.create');
}
// 编辑图片内容,跳转到编辑页面
public function edit($id)
{
$datas = $this->carousel->find($id);
return view('admin.carousel.edit',compact('datas'));
}
// 接受更新的数据,更新数据
public function update($id)
{
$data = Input::all();
$res = $this->carousel->carouselupdate($id,$data);
if($res){
return redirect('carousel')->with('message', '更新成功'); //要在模板上用session('message')取值
}else{
return back()->with('errors','更新失败');
}
}
//删除某条信息
public function destroy($id)
{
$res = $this->carousel->del($id);
if ($res){
return response()->json(['status' => 0, 'msg' => '删除成功']);
}else{
return response()->json(['status' => 1, 'msg' => '删除失败,请重试']);
}
}
// 保存轮播图信息
// 保存内容
public function store(\Request $request )
{
$input = Input::except('_token','picfile');
$res = $this->uploadpic('picfile','uploads/images');
switch ($res){
case 1: return back()->with('errors','图片上传失败');
case 2: return back()->with('errors','图片不合法');
case 3: return back()->with('errors','图片储存失败');
default :
$input['figure_img'] = $res; //把得到的地址给picname存到数据库
if($this->carousel->add($input)){
return redirect('carousel')->with('message', '发布成功'); //这个message是存在session里面的,在模板中药通过session取值
}else{
return back()->with('errors','数据填充失败')->withInput();;
}
}
}
}
// 被继承的commonController控制器里面的图片上传处理
class ConmonController extends Controller
{
// 上传图片
public function uploadpic( $filename, $filepath)
{
// 1.首先检查文件是否存在
if (\Request::hasFile($filename)){
// 2.获取文件
$file = \Request::file($filename);
// 3.其次检查图片手否合法
if ($file->isValid()){
// 4.将文件取一个新的名字
$newName = 'partner'.time().rand(100000, 999999).$file->getClientOriginalName();
// 5.移动文件,并修改名字
if($file->move($filepath,$newName)){
return $filepath.'/'.$newName; //返回一个地址
}else{
return 3;
}
}else{
return 2;
}
}else{
return 1;
}
}
// $realPath = $file->getRealPath(); //这个表示的是缓存在tmp文件夹下的文件的绝对路径;
// $tmpName = $file -> getFileName(); //缓存在tmp文件中的文件名
// $clientName = $file -> getClientOriginalName(); //获取文件名称
//$extension = $file->getClientOriginalExtension(); //上传文件的后缀
}
// 如果需要做验证判断
public function leaveStore()
{
$input = Input::all();
$rules = [
'phone'=>'required',
'content'=>'required',
];
$message = [
'phone.required'=>'电话号码必须填写!',
'content.required'=>'反馈信息必须填写!',
];
$validator = Validator::make($input,$rules,$message);
if ($validator->fails()){
return back()->withErrors($validator)->withInput();
}
$result = $this->leave->add($input);
if ($result){
return back()->with('message','留言成功');//这个值是存在session中的
}else{
return back()->with('errors','留言失败')->withInput(); //返回错误信息在模板中读出,并将用户填写的信息用withInput();返回
}
}
3.插入信息的页面
@extends('admin.admin')
@section('content')
<ul class="breadcrumb">
<li><a href="{{url('admin/console')}}">首页</a></li>
<li>轮播图</li>
<li>轮播图添加</li>
</ul>
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">轮播图添加</h3>
</div>
<div class="box-body">
// 1。如果插入信息失败,就这样处理,如果错误是一个变量。就遍历,是一个单量,就直接输出
@if(count($errors)>0)
<div class=""mark>
@if(is_object($errors))
@foreach($errors->all() as $error)
<p>{{$error}}</p>
@endforeach
@else
<p>{{$errors}}</p>
@endif
@endif
<form class="form-horizontal" action="{{ url('carousel/')}}" method="POST" enctype="multipart/form-data">
{{ csrf_field() }}
<div class="form-group">
<label class="col-sm-2 control-label" >图片标题</label>
<div class="col-sm-10">
<input type="text" name="figure_title" class="form-control" value="{{ old('figure_title') }}" placeholder="图片标题" >
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">图片内容</label>
<div class="col-sm-10">
<input type="text" name="content" class="form-control" value="{{ old('content') }}" placeholder="图片内容">
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">选择文件</label>
<div class="col-sm-10">
<input type="file" name="picfile" >
</div>
</div>
<div class="form-group row">
<div class="col-md-4 col-md-offset-2">
<input class="btn btn-primary" type="submit" value="提交">
</div>
</div>
</form>
</div>
</div>
@endsection
4.信息列表页面
@extends('admin.admin')
@section('content')
<script src="layer/layer.js"></script>
//这个session是插入信息成功,重定向加with(message')里面的信息
@if (session('message'))
<div class="alert alert-success">
{{ session('message') }}
</div>
@endif
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">轮播图列表</h3>
</div><!-- /.box-header -->
<div class="box-body">
<table class="table table-hover">
<tr>
<th>ID</th>
<th>图片标题 </th>
<th>图片内容 </th>
<th>图片</th>
<th>编辑</th>
</tr>
@foreach($datas as $data)
<tr>
<td>{{$data->figure_id }}</td>
<td>{{ $data->figure_title }}</td>
<td>{{ $data->content }}</td>
// 1.读图片的时候,前面要加上"/",从根部开始读取
<td><img src="/{{$data->figure_img}}" alt="" style="width: 100;height: 100px;"></td>
<td>
<a href="{{ url('carousel/'.$data->figure_id.'/edit') }}" class="btn btn-info btn-primary btn-sm iframe cboxElement"><span class="glyphicon glyphicon-pencil"></span> 编辑</a>
<a class="btn btn-info btn-danger btn-sm iframe cboxElement" href="javascript:;" onclick="delCate({{$data->figure_id}})"><span class="glyphicon glyphicon-trash"></span> 删除</a>
</td>
</tr>
@endforeach
</table>
</div><!-- /.box-body -->
<div class="box-footer clearfix">
<div class="pull-left">
// 2.信息成分页,注意变量是$datas,$links
{{ $datas->links() }}
</div>
</div>
</div><!-- /.box -->
<script>
//删除分类
function delCate(id) {
layer.confirm('你确定删除吗?', {
btn: ['确定','取消'] //按钮
}, function(){
$.post("{{ url('carousel') }}/"+id,{'_method':'delete' ,'_token':'{{csrf_token()}}'},function (data) {
if(data.status==0){
location.href = location.href;
layer.msg(data.msg,{icon:6});
}else{
layer.msg(data.msg, {icon:6});
}
} );
}, function(){
});
}
</script>
@endsection
5.信息编辑页面
@extends('admin.admin')
@section('content')
<ul class="breadcrumb">
<li><a href="{{url('admin/admin')}}">首页</a></li>
<li>内容管理</li>
<li>图片编辑</li>
</ul>
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">图片编辑</h3>
</div>
<div class="box-body">
<form class="form-horizontal" action="{{ url('carousel/'.$datas->figure_id )}}" method="POST">
<input type="hidden" name="_method" value="PUT">
{{ csrf_field() }}
<div class="form-group">
<label class="col-sm-2 control-label" >图片标题</label>
<div class="col-sm-10">
<input type="text" name="figure_title" class="form-control" value="{{ $datas->figure_title }}" placeholder="图片标题">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">图片内容</label>
<div class="col-sm-10">
<input type="text" name="content" class="form-control" value="{{ $datas->content }}" placeholder="图片内容">
</div>
</div>
<div class="form-group row">
<div class="col-md-4 col-md-offset-2">
<input class="btn btn-primary" type="submit" value="提交">
</div>
</div>
</form>
</div>
</div>
@endsection
6.在提交页面传递成功与否的信息
//这是在一个被继承的主页面里面写的
<section class="content">
@if(is_object($errors))
@if (count($errors) > 0)
<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<p><i class="icon fa fa-ban"></i> 填写表单出错了哦!</p>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
@else
<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<p><i class="icon fa fa-ban"></i> 出错了哦!</p>
<ul>
<li>{{ $errors }}</li>
</ul>
</div>
@endif
@if(Session::has('message'))
<div class="alert alert-success alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<p><i class="icon fa fa-check"></i> {{Session::get('message')}}</p>
</div>
@endif
@yield('content')
</section>