laravel简书(2)

用户注册

public function register() {

//验证

$this->validate(\request(),[

‘name‘=>‘required|min:3|unique:users,name‘,//设置user表里的字段name是唯一的

‘email‘=>‘required|unique:users,email|email‘,

‘password‘=>‘required|min:5|max:10|confirmed‘,

]);

//逻辑

$name = \request(‘name‘);

$email = \request(‘email‘);

$password = bcrypt(\request(‘password‘));//bcrypt:使用明文加密

$user = User::create(compact(‘name‘,‘email‘,‘password‘));

//渲染

return redirect(‘/login‘);

}

}

<form class="form-signin" method="POST" action="/register">
    {{ csrf_field() }}
@include(‘layout.error‘)
<button class="btn btn-lg btn-primary btn-block" type="submit">注册</button>

用户登录

//登录行为

public function login() {

//验证

$this->validate(\request(),[

‘email‘=>‘required|email‘,

‘password‘=>‘required|min:5|max:10‘,

‘is_remember‘=>‘integer‘

]);

//逻辑

$user = \request([‘email‘,‘password‘]);

$is_remember = boolval(\request(‘is_remember‘));

if(\Auth::attempt($user,$is_remember)) {

return redirect(‘/posts‘);

}

//渲染

return \Redirect::back()->withErrors(‘邮箱密码不匹配‘);

}

用户登出

//登出行为

public function logout() {

\Auth::logout();

return redirect(‘/login‘);

}

使用policy实现文章权限控制:

在首页显示用户名:{{$post->user->name}}

1、在命令行中创建PostPolicy.php

F:\php\bianshu>php artisan make:policy
PostPolicy

Policy created successfully.

并在PostPolicy.php中增加两个方法:

//修改权限

public function update(User $user,Post $post) {

return $user->id == $post->user_id;

}

//删除权限

public function delete(User $user,Post $post) {

return $user->id == $post->user_id;

}

2、在App\Policies\PostPolicy.php中修改以下内容:

protected $policies = [

//‘App\Model‘ => ‘App\Policies\ModelPolicy‘,

‘App\Post‘=>‘App\Policies\PostPolicy‘,

];

3、在PostController.php中的update和delete方法中分别增加以下内容:

$this->authorize(‘update‘,$post);

$this->authorize(‘delete‘,$post);

4、使除了自己没有权限的用户查看文章详情页时不显示编辑和删除的图标:增加can方法

@can(‘update‘,$post)

<a style="margin: auto"  href="/posts/{{$post->id}}/edit">

<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>

</a>

@endcan

{{[email protected]}}

@can(‘update‘,$post)

<a style="margin: auto"  href="/posts/{{$post->id}}/delete">

<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>

</a>

@endcan

评论

1、配置路由

//提交评论

Route::post(‘/posts/{post}/comment‘,‘\App\Http\Controllers\[email protected]‘);

2、编写comment方法

//提交评论

public function comment(Post $post) {

//验证

$this->validate(\request(),[

‘content‘=>‘required|min:3‘,

]);

//逻辑

$comment = new Comment();

$comment->user_id = \App::id();

$comment->content = \request(‘content‘);

$post->comments()->save($comment);

//渲染

return back();

}

3、详情页配置

<form action="/posts/{{ $post->id }}/comment" method="POST">

{{ csrf_field() }}

4、Comment.php模型

class Comment extends Model

{

//评论所属文章

public function post() {

return $this->belongsTo(‘App\Post‘);

}

}

实现评论列表

Show.blade.php

@foreach($post->comments as $comment)

<li class="list-group-item">

<h5>{{$comment->created_at}} by {{$comment->user->name}}</h5>

<div>

{{$comment->content}}

</div>

</li>

@endforeach

Comment.php

//评论所属用户

public function user() {

return $this->belongsTo(‘App\User‘);

}

public function show(Post $post) {

$post->load(‘comments‘);

实现评论数

//文章列表页

public function index() {

$posts =Post::orderBy(‘created_at‘,‘desc‘)->withCount(‘comments‘)->paginate(6);

<p class="blog-post-meta">赞 0  | 评论 {{$post->comments_count}}</p>

点赞

1、  路由配置

//

Route::get(‘/{post}/zan‘,‘\App\Http\Controllers\[email protected]‘);

//取消赞

Route::get(‘/{post}/unzan‘,‘\App\Http\Controllers\[email protected]‘);

2、PostController.php

//

public function zan(Post $post) {

$param = [

‘user_id‘=>\Auth::id(),

‘post_id‘=>$post->id

];

Zan::firstOrCreate($param);

return back();//回退

}

//取消赞

public function unzan(Post $post) {

$post->zan(\Auth::id())->delete();

return back();

}

3、Post.php

//和用户进行关联

public function zan($user_id) {

//文章对应的某个ID是否有赞

return $this->hasOne(\App\Zan::class)->where(‘user_id‘,$user_id);

}

//文章的所有赞

public function zans() {

return $this->hasMany(\App\Zan::class);

}

4、show.blade.php

@if($post->zan(\Auth::id())->exists())

<a href="/posts/{{$post->id}}/unzan" type="button" class="btn btn-default btn-lg">取消赞</a>

@else

<a href="/posts/{{$post->id}}/zan" type="button" class="btn btn-primary btn-lg">赞</a>

@endif

列表页展示赞的数量

1、PostController.php

//文章列表页
public function index() {
    $posts =Post::orderBy(‘created_at‘,‘desc‘)->withCount([‘comments‘,‘zans‘])->paginate(6);

2、  index.blade.php

<p class="blog-post-meta">赞 {{$post->zans_count}} | 评论 {{$post->comments_count}}</p>

时间: 2024-10-12 17:35:05

laravel简书(2)的相关文章

【凯子哥带你学Android】Andriod性能优化之列表卡顿——以“简书”APP为例

这几天闲得无聊,就打开手机上的开发者模式里面的"GPU过度绘制"功能,看看别家的App做的咋样,然后很偶然的打开了"简书",然后就被它的过度绘制惊呆了,于是写了这篇性能分析的文章,从一个只有APK文件的角度,说下如何寻找布局中可能存在的性能问题,以及解决方案.本文章以简书Android最新版本1.9.1进行分析. GPU过度绘制 Hierarchy View SysTrace TraceView 总结 分析资源下载 GPU过度绘制 首先打开下面两个功能开关 开发者模

《信息安全技术》简书破密

wireshark网络捕获 今天的作业是用wireshark软件捕获网络 我就用它捕获了我登的简书登录账号跟密码,密码是假的,但账号跟错误的密码都捕获成功了. 首先打开软件,点开所用的网络类型,我的是WALN 然后打开网址登录网页,登陆账号 接下来找,因为我登的是http协议,所以可以在应用显示过滤器中输入hhttp.request.method==POET来节省时间 找到了,账号 错误的密码都捕获到了 真的好神奇!越来越对这些课感兴趣了.

如何用css实现类似简书的纵向导航/竖排导航

作为一个专注阅读的网站,它的导航也一定是全局的,固定的,也是简洁的.事实上几家阅读网站豆瓣阅读,多看,简书都是这样做的,刚好实现起来也不算复杂,以下是我想到的实现方法. 首先是html的结构: 1 <body> 2 <nav> 3 <div> 4 <a href="#">点</a> 5 <a href="#">滴</a> 6 <a href="#">一

iOS实现简书的账号识别方式(正则表达式)

通过简书iOS客户端登录,我们会看到请输入手机号或者邮箱登录,但是我们随机输入1234567的时候,便会弹出手机格式不正确,同样也会识别我们的邮箱格式,那么我们在项目中怎么实现这种判断呢? 0E471361-060C-4D93-913F-73622F89BC60.png 这就是我们今天要说的正则表达式. 正则表达式的介绍 正则表达式有多种使用方法,根据我们的需要,我们是要判断输入是否合法,还是查找指定的内容,还是捕获多个输入的内容,可以选用不同的方法,今天我们主要说一下,判断输入是否合法,用谓词

简书-markdown

标题 这是最为常用的格式,在平时常用的的文本编辑器中大多是这样实现的:输入文本.选中文本.设置标题格式. 如: # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 注:# 和「一级标题」之间建议保留一个字符的空格,这是最标准的 Markdown 写法. 你可以你的编辑器中尝试输入这六级标题,可以参考下方的截图: 一级标题至六级标题 列表 Markdown 中,只需要在文字前面加上 - 如: - 文本1 - 文本2 - 文本3 有序排列

转载:简书 vim环境配置 作者 fromradio 留作备忘 如侵权请联系删除

为Python创建Vim环境 作者 fromradio 2016.08.04 11:36* 字数 1766 阅读 504评论 0喜欢 12 大部分Python使用者可能习惯使用Sublime Text 3等笔记本式的编辑器.然而实际工作环境中有可能遇到需要在无GUI环境下工作的情况,比如需要登录到虚机上进行调试等.此时vim成为了常用的编辑器选择,所以如何使得vim变得心应手成为一个重要的问题. 第一个问题是vim版本的问题,笔者工作环境中的red hat 6版本的默认vim为7.2,不能支持后

Python 2.7_多进程获取简书专题数据(一)

学python几个月了正好练练手,发现问题不断提高,先从专题入手,爬取些数据,一开始对简书网站结构不熟悉,抓取推荐,热门,城市3个导航栏,交流发现推荐和热门是排序不同,url会重复,以及每个专题详情页三个类目最新评论,最新收录, 热门也会重复 做了下调整,代码执行完毕会返回所有专题的urls元组对象,以便下一步进入每个专题页面解析获取其他数据.注:变量focus关注数,和打开专题后最上面显示的专题关注人数会有差异,例如有的专题关注了10175人,在专题列表页会显示成"10.07k",因

[开源,学习,分享]UWP第三方简书客户端分享

简介 Windows10正式版发布到现在,我利用零零碎碎的一些时间对UWP进行一些学习,也基于这门技术开发了一个第三方的简书App. 基本界面 优酷视频: http://v.youku.com/v_show/id_XMTM2MjU4MjI4NA==.html 基本功能 客户端采用了UWP的技术,所以支持x86,x64,ARM平台,采用了响应式的布局.对手机进行了部分的优化. 对SQLite和本地存储进行了封装,支持缓存. 缓存支持同步和异步的两种方式,分别实现了两个接口: internal in

博客园不支持Markdown语法,新博客将发在简书...

由于博客园博文编辑界面不支持Markdown语法,发在其它平台的博客很难轻松复制过来... 未来新博客将只发在简书里,虽然也很少写博客哈哈... 我的简书个人主页:http://www.jianshu.com/u/f8590867dc2a