Laravel是一款流行的PHP开发框架,它简化了Web应用程序的开发过程,并提供了许多强大的功能和工具。作为一个开发者,我使用Laravel已经有一段时间了,下面是我对这个框架的一些心得体会。
1. 简单易用:Laravel的设计思想是让开发过程变得简单而愉快。它提供了直观且具有表达力的语法,使得编写代码更加轻松。同时,Laravel还提供了丰富的文档和教程,帮助开发者快速上手并解决问题。
2. MVC架构:Laravel采用了MVC(模型-视图-控制器)的架构模式,使代码的组织更加清晰有序。通过将业务逻辑、数据和视图分离,开发者可以更好地管理和维护代码。这种架构模式也有助于团队合作和项目的可扩展性。
3. 强大的数据库支持:Laravel提供了强大而灵活的数据库支持,可以使用原生SQL查询,也可以使用查询构造器和ORM(对象关系映射)进行数据库操作。这使得开发者可以更轻松地与各种数据库进行交互,而无需深入了解底层细节。
4. 路由和中间件:Laravel的路由系统非常强大,可以将URL与相应的控制器方法进行绑定。通过定义路由和中间件,可以轻松实现身份验证、访问控制和请求过滤等功能。这使得开发者可以更好地管理和保护应用程序的路由和终端点。
5. Blade模板引擎:Laravel的Blade模板引擎提供了一种简洁而强大的方式来构建视图。它支持条件语句、循环和局部视图等功能,使开发者可以更好地组织和重用视图代码。同时,Blade还支持模板继承和布局,使得视图的编写更加灵活和高效。
6. 高度可测试性:Laravel鼓励开发者编写可测试的代码,并提供了一系列工具和方法来简化测试过程。开发者可以使用PHPUnit等测试框架进行单元测试和集成测试,确保代码的质量和稳定性。这也有助于快速发现和修复潜在的问题。
7. 社区丰富活跃:Laravel拥有一个庞大而活跃的社区,许多优秀的扩展包和库都是由社区贡献的。这些扩展包可以帮助开发者快速实现各种功能,进一步提高开发效率。此外,有很多Laravel相关的博客、论坛和教程可供学习和交流。
总的来说,Laravel是一个强大而易用的PHP开发框架,它提供了丰富的功能和工具,使得开发Web应用程序变得更加简单和高效。通过采用MVC架构、强大的数据库支持、灵活的路由和中间件、高度可测试性以及活跃的社区等特性,Laravel成为了许多开发者的首选框架。我相信随着时间的推移,Laravel框架会继续发展壮大,为PHP开发者带来更多的便利和创造力。
laravel框架的目录结构
下面是定义路由文件代码、部分public文件下的代码和运行页面效果图
<?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="container">
<div class="row mt-4">
<!-- 轮播图 -->
<div class="col-md-6 main-carousel">
<div id="carouselExampleCaptions" class="carousel slide" data-ride="carousel">
<div class="carousel-inner">
@foreach($recommend as $k=>$con)
<div class="carousel-item @if($k==0) active @endif">
<img src="/static/upload/{{$con->image}}" class="d-block w-100">
<a href="{{url('detail', ['id'=> $con->id])}}">
<div class="carousel-caption d-none d-md-block">
<h5>{{$con->title}}</h5>
<p></p>
</div>
</a>
</div>
@endforeach
</div>
<a class="carousel-control-prev" href="#carouselExampleCaptions" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleCaptions" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
</div>
<!-- 广告位 -->
<div class="col-md-6">
<div class="row main-imgbox">
@foreach($adv as $adval)
<div class="col-md-6">
<a href="#"><img class="img-fluid" src="/static/upload/{{$adval}}"></a>
</div>
@endforeach
</div>
</div>
</div>
<div class="row">
<div class="col-md-9">
<div class="row">
<!-- 栏目内容 -->
@foreach($list as $value)
<div class="col-md-6 mb-4">
<div class="card main-card">
<div class="card-header">
<h2>{{$value->name}}</h2>
<span class="float-right">
<a href="{{ url('lists', ['id' => $value->id ])}}">[ 查看更多 ]</a>
</span>
</div>
@foreach($value->content as $val)
<div class="card-body">
<div class="main-card-pic">
<a href="{{url('detail', ['id'=> $val->id])}}">
<img class="img-fluid" src="/static/upload/{{$val->image}}">
<span><i class="fa fa-search"></i></span>
</a>
</div>
<div class="main-card-info">
<span><i class="fa fa-calendar"></i>
{{ date('Y-m-d', strtotime($val->created_at)) }}</span>
</div>
<h3><a href="{{url('detail', ['id'=> $val->id])}}">{{$val->title}}</a></h3>
<div class="main-card-desc">{!!str_limit($val->content , 100)!!}</div>
</div>
@endforeach
</div>
</div>
@endforeach
</div>
</div>
<div class="col-md-3">
<!-- 侧边栏 -->
@include('public/sidebar')
</div>
</div>
</div>
</div>
@include('public/footer')
</body>
</html>
<!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>