<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Category;
use Illuminate\Validation\Rule;
class CategoryController extends Controller
{
public function add(){
$category = Category::where('pid', 0)->get();
return view('admin.category.add', ['category' => $category] );
}
public function save(Request $request){
$data = $request->all();
$rule = isset($data['id']) ? ',name,'.$data['id'] : '';
$this->validate($request,[
'name'=>'required|unique:category'.$rule,
],[
'name.required'=>'栏目名称不能为空',
'name.unique'=>'栏目名称不能重复'
]);
if(isset($data['id'])){
$id = $data['id'];
unset($data['id']);
unset($data['_token']);
$res = Category::where('id',$id)->update($data);
$type = $res ? "message" : "tip";
$message = $res ? "修改成功" : "修改失败";
return redirect('category')->with($type, $message);
}
$re = Category::create($data);
if($re){
return redirect('category')->with('message','添加成功');
}else{
return redirect('category/add')->with('tip','添加失败');
}
}
public function index(){
$data = Category::orderBy('sort', 'asc')->get()->toArray();
$category = $this->getTreeListCheckLeaf($data);
return view('admin.category.index', ['category' => $category]);
}
public function getTreeListCheckLeaf($data, $name = 'isLeaf')
{
$data = $this->treeList($data);
foreach ($data as $k => $v) {
foreach ($data as $vv) {
$data[$k][$name] = true;
if ($v['id'] === $vv['pid']) {
$data[$k][$name] = false;
break;
}
}
}
return $data;
}
public function treeList($data, $pid = 0, $level = 0, &$tree = [])
{
foreach ($data as $v) {
if ($v['pid'] == $pid) {
$v['level'] = $level;
$tree[] = $v;
$this->treeList($data, $v['id'], $level + 1, $tree);
}
}
return $tree;
}
public function sort(Request $request){
$sort = $request->input('sort');
foreach ($sort as $k => $v) {
Category::where('id', (int)$k)->update(['sort' => (int)$v]);
}
return redirect('category')->with('message','改变排序成功');
}
public function edit($id){
$data = [];
if ($id) {
if (!$data = Category::find($id)) {
return back()->with('tip', '记录不存在。');
}
}
$category = Category::where('pid', 0)->get();
return view('admin.category.edit', ['id'=>$id, 'data'=>$data, 'category' => $category]);
}
public function delete($id){
if (!$category = Category::find($id)) {
return response()->json(['code' => 0, 'msg' => '删除失败,记录不存在。' ]);
}
$category->delete();
return response()->json(['code' => 1, 'msg' => '删除成功' ]);
}
}
<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Category;
use App\Content;
class ContentController extends Controller
{
public function add()
{
$data = Category::orderBy('sort', 'asc')->get()->toArray();
$cate = new CategoryController();
$category = $cate->getTreeListCheckLeaf($data);
return view('admin.content.add', ['category' => $category]);
}
public function save(Request $request)
{
$data = $request->all();
$this->validate($request,[
'cid'=>'required',
'title'=>'required'
],[
'cid.require'=>'分类不能为空',
'title.require'=>'标题不能为空'
]);
if(isset($data['id'])){
$id = $data['id'];
unset($data['id']);
unset($data['_token']);
$res = Content::where('id',$id)->update($data);
$type = $res ? "message" : "tip";
$message = $res ? "修改成功" : "修改失败";
return redirect('content')->with($type, $message);
}
$re = Content::create($data);
if($re){
return redirect('content')->with('message','添加成功');
}else{
return redirect('content/add')->with('tip','添加失败');
}
}
public function upload(Request $request)
{
if ($request->hasFile('image')) {
$image = $request->file('image');
if ($image->isValid()) {
$name = md5(microtime(true)) . '.' . $image->extension();
$image->move('static/upload', $name);
$path = '/static/upload/' . $name;
$returndata = array(
'filename' => $name,
'path' => $path
);
$result = [
'code' => 1,
'msg' => '上传成功',
'time' => time(),
'data' => $returndata,
];
return response()->json($result);
}
return $image->getErrorMessage();
}
return '文件上传失败';
}
public function index($id = 0)
{
$data = Category::orderBy('sort', 'asc')->get()->toArray();
$cate = new CategoryController();
$category = $cate->getTreeListCheckLeaf($data);
$content = Content::get();
if ($id) {
$content = Content::where('cid', $id)->get();
}
return view('admin.content.index', ['category' => $category, 'content' => $content, 'cid' => $id]);
}
public function edit(Request $request)
{
$id = $request->id;
$data = Category::orderBy('sort', 'asc')->get()->toArray();
$cate = new CategoryController();
$category = $cate->getTreeListCheckLeaf($data);
$content = Content::find($id);
return view('admin.content.edit', ['category' => $category, 'content' => $content]);
}
public function delete($id)
{
if (!$content = Content::find($id)) {
return response()->json(['code' => 0, 'msg' => '删除失败,记录不存在。' ]);
}
$content->delete();
return response()->json(['code' => 1, 'msg' => '删除成功' ]);
}
}
Laravel框架开发实践的心得
Laravel框架给我留下了深刻的印象,其优雅的语法和丰富的功能使得开发变得更加高效和愉快。在实际工作中,我通过以下几点来提升Laravel框架开发的效率和质量:
良好的文档和社区支持:Laravel拥有详细且易于理解的官方文档,同时也有庞大而活跃的社区支持。在遇到问题时,我能够迅速地查阅文档或向社区寻求帮助,节省了大量的解决问题时间。
遵循最佳实践:我始终坚持使用Laravel框架推荐的最佳实践,如MVC模式、依赖注入等。这样不仅有助于代码结构清晰、易于维护,也使得团队协作更加高效。
使用Composer管理依赖:Composer是PHP的依赖管理工具,我在项目中广泛使用Composer来管理第三方依赖包,确保项目的稳定性和安全性。
优化性能:在开发过程中,我会对代码进行性能优化,尽量减少数据库查询次数、缓存数据等方法来提高系统性能,从而改善用户体验。
研究人员们在游戏主机领域进行了多方面的工作。他们致力于开发更高性能、更节能和更可靠的游戏主机硬件,包括处理器架构、图形处理单元(GPU)、内存和存储技术,并关注游戏主机的物理设计、散热和噪音控制等方面。
另外,研究者还专注于游戏主机软件开发,努力开发游戏引擎、图形渲染技术、物理模拟等工具和框架,以提高游戏开发的效率和质量。一些研究者也在探索游戏主机上的虚拟现实(VR)和增强现实(AR)技术。
随着在线游戏的兴起,游戏主机的网络性能变得越来越重要。因此,研究者们努力改进游戏主机的网络连接稳定性、延迟和带宽,包括网络协议优化、数据压缩和流媒体技术等方面的研究。
另外,研究者们也关注游戏主机用户体验和交互设计,通过实验和用户调研,探索如何设计更直观、易用和有趣的游戏主机界面,以及改善多人游戏体验和社交功能。最后,研究人员们致力于提高游戏主机的安全性和防护机制,包括身份验证、加密算法、漏洞挖掘和反作弊技术等方面的研究,以保护游戏主机上存储的个人信息和支付信息。
安全性考虑:在开发过程中,我会重视数据验证、防止SQL注入、XSS攻击等安全问题,以确保系统的安全性和稳定性。
日志和错误处理:我在项目中加入了日志记录功能,及时记录系统运行情况,方便后期排查问题。同时,我也会合理处理异常,提高系统的可靠性。
自动化测试:我会编写单元测试、功能测试等各种测试用例,以确保代码质量和系统稳定性,同时减少潜在的bug出现。
项目复盘
在每个项目结束之后,我都会进行项目复盘,总结工作中的得失和经验教训。通过项目复盘,我发现了一些可以改进的地方:
沟通与协作:在团队协作中,及时有效的沟通和协作是非常重要的。在过去的项目中,我意识到在沟通和协作方面还有提升的空间,因此我开始主动与团队成员沟通,分享想法,并学习倾听他人的意见。
时间管理:在项目开发过程中,我注意到有时候会因为没有合理安排时间而导致工作效率降低。因此,我开始尝试使用时间管理工具来规划和分配工作时间,提高工作效率。
持续学习:技术更新换代非常快,作为一名软件开发工程师,持续学习是必不可少的。我开始着手学习一些新的技术,以便在未来的项目中能够更好地应用这些新知识。
技术笔记
为了巩固所学知识,我经常会编写技术笔记,将学到的知识整理成文字或者图表,以便之后复习和巩固。这种方式帮助我更好地理解和掌握所学的知识点,同时也提高了我的工作效率。
职场感悟心得
作为一名职场新人,我认识到在工作中除了技术能力之外,沟通能力、团队协作能力等软实力同样重要。我逐渐明白了团队合作的重要性,学会了与同事们更好地相处和合作。此外,我也意识到在职场中需要不断学习和提升自己,以应对日益复杂和多变的工作环境。
总的来说,Laravel框架的开发实践让我受益匪浅,项目复盘也让我有机会总结经验、找到改进的空间。而技术笔记和职场感悟心得则成为了我前行路上的宝贵财富。我相信,在未来的工作中,我会继续努力学习,不断提升自己,成为一名更优秀的软件开发工程师。
部分路由:
<?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('/', function () {
return view('welcome');
});
//后台
Route::get('/admin/login','Admin\UserController@login');
Route::post('/admin/check','Admin\UserController@check');
Route::get('/admin/logout', 'Admin\UserController@logout');
Route::get('/admin/index', 'Admin\IndexController@index')->middleware(['Admin']);
//栏目
Route::prefix('category')->namespace('Admin')->middleware(['Admin'])->group(function () {
Route::get('', 'CategoryController@index');
Route::get('add', 'CategoryController@add');
Route::post('save', 'CategoryController@save');
Route::get('edit/{id}', 'CategoryController@edit');
Route::post('delete/{id}', 'CategoryController@delete');
Route::post('sort', 'CategoryController@sort');
});
// 内容
Route::prefix('content')->namespace('Admin')->middleware(['Admin'])->group(function () {
Route::get('add', 'ContentController@add');
Route::post('upload', 'ContentController@upload');
Route::post('save', 'ContentController@save');
Route::get('edit/{id}', 'ContentController@edit');
Route::post('delete/{id}', 'ContentController@delete');
Route::get('{id?}', 'ContentController@index');
});
// 广告位
Route::prefix('adv')->namespace('Admin')->middleware(['Admin'])->group(function () {
Route::get('add/{id?}', 'AdvController@add');
Route::post('save', 'AdvController@save');
Route::post('delete/{id}', 'AdvController@delete');
Route::get('', 'AdvController@index');
});
// 广告内容
Route::prefix('advcontent')->namespace('Admin')->middleware(['Admin'])->group(function () {
Route::get('add/{id?}', 'AdvcontentController@add');
Route::post('upload', 'AdvcontentController@upload');
Route::post('save', 'AdvcontentController@save');
Route::post('delete/{id}', 'AdvcontentController@delete');
Route::get('', 'AdvcontentController@index');
});
// 首页
Route::get('/', 'IndexController@index');
Route::get('/lists/{id}', 'IndexController@lists');
Route::get('/detail/{id}', 'IndexController@detail');
Route::get('/like/{id}', 'IndexController@like');
Route::get('/comment', 'IndexController@comment');
Route::post('/register', 'UserController@register');
Route::post('/login', 'UserController@login');
Route::get('/logout', 'UserController@logout');
// 设置面包屑导航
Route::name('home')->get('/', 'IndexController@index');
Route::name('category')->get('/lists/{id}', 'IndexController@lists');
Route::name('detail')->get('/detail/{id}', 'IndexController@detail');
部分原代码:
<!DOCTYPE html>
<html>
<head>
@include('public/static')
<title>详细页</title>
</head>
<body>
@include('public/header')
<div class="main">
<div class="main-crumb">
<div class="container">
<!-- 面包屑导航 -->
<nav aria-label="breadcrumb">
{!! Breadcrumbs::render('detail', ['id'=>$id,'cid'=>$cid]); !!}
</nav>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-md-9">
<!-- 内容区域 -->
<article class="main-article">
<header>
<h1>{{$content->title}}</h1>
<div>发表于{{ date('Y-m-d', strtotime($content->create_time)) }}</div>
</header>
<div class="main-article-content">
<p><img class="img-fluid" src="/static/upload/{{$content->image}}"></p>
<p>{!! $content->content !!}</p>
</div>
<!-- 点赞模块 -->
@if(session()->has('users'))
<div class="main-article-like">
<span>
<i class="fa fa-thumbs-up" aria-hidden="true">{{$count}}</i>
</span>
</div>
@endif
</article>
<div class="main-comment">
<!-- 评论列表 -->
@if(!$comments->isEmpty())
<div class="main-comment-header">
<span id="count">{{$comments->count()}}</span> 条评论
</div>
@foreach($comments as $val)
<div class="main-comment-item">
<div class="main-comment-name">{{$val->user->name}}</div>
<div class="main-comment-date">
{{ date('Y-m-d', strtotime($val->created_at)) }}</div>
<div class="main-comment-content">{{$val->content}}</div>
</div>
@endforeach
@endif
</div>
<!-- 发表评论模块 -->
<div class="main-reply">
@if(session()->has('users'))
<div class="main-reply-header">发表评论</div>
<div class="main-reply-title">评论内容</div>
<div><textarea name="content" rows="8" id="content"></textarea></div>
<div>
<input type="hidden" id='c_id' value="{{$id}}">
<input type="button" value="提交评论" id="publish">
</div>
@endif
</div>
</div>
<div class="col-md-3">
<!-- 侧边栏 -->
@include('public/sidebar')
</div>
</div>
</div>
</div>
@include('public/footer')
</body>
<script>
$(document).ready(function() {
$(".fa-thumbs-up").bind("click", function () {
$.get("{{ url('like', $id) }}", {}, function (result) {
var count = result.count;
$(".fa-thumbs-up").html();
$(".fa-thumbs-up").html(count);
});
});
$('#publish').bind("click",function(){
var data = {
'cid' : $("#c_id").val(),
'content' : $("#content").val()
};
$.get("{{ url('comment') }}",data, function(result){
var data = result.data;
var user = data.user;
var html = '<div class="main-comment-item">';
html += '<div class="main-comment-name">' + user['name'] + '</div>';
html += '<div class="main-comment-date">';
html += data['created_time'];
html += '</div>';
html += '<div class="main-comment-content">';
html += data['content'] + '</div>';
html += '</div>';
$(".main-comment").append(html);
$("#count").html();
$("#count").html(data['count']);
});
});
});
</script>
</html>
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Laravel</title>
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">
<!-- Styles -->
<style>
html, body {
background-color: #fff;
color: #636b6f;
font-family: 'Nunito', sans-serif;
font-weight: 200;
height: 100vh;
margin: 0;
}
.full-height {
height: 100vh;
}
.flex-center {
align-items: center;
display: flex;
justify-content: center;
}
.position-ref {
position: relative;
}
.top-right {
position: absolute;
right: 10px;
top: 18px;
}
.content {
text-align: center;
}
.title {
font-size: 84px;
}
.links > a {
color: #636b6f;
padding: 0 25px;
font-size: 13px;
font-weight: 600;
letter-spacing: .1rem;
text-decoration: none;
text-transform: uppercase;
}
.m-b-md {
margin-bottom: 30px;
}
</style>
</head>
<body>
<div class="flex-center position-ref full-height">
@if (Route::has('login'))
<div class="top-right links">
@auth
<a href="{{ url('/home') }}">Home</a>
@else
<a href="{{ route('login') }}">Login</a>
@if (Route::has('register'))
<a href="{{ route('register') }}">Register</a>
@endif
@endauth
</div>
@endif
<div class="content">
<div class="title m-b-md">
Laravel
</div>
<div class="links">
<a href="https://laravel.com/docs">Docs</a>
<a href="https://laracasts.com">Laracasts</a>
<a href="https://laravel-news.com">News</a>
<a href="https://blog.laravel.com">Blog</a>
<a href="https://nova.laravel.com">Nova</a>
<a href="https://forge.laravel.com">Forge</a>
<a href="https://github.com/laravel/laravel">GitHub</a>
</div>
</div>
</div>
</body>
</html>
成果图: