菜鸟的蜕变:教你一步一步创建基于laravel5的简易论坛系统(3)

上篇文章我已经带大家熟悉了laravel框架的基本结构、路由功能、控制器、视图等各个部分交互方式,这篇文章继续带大家做一下其他页面。

创建帖子内容页和个人主页路由,增加

Route::get(‘article_show/{id}‘,‘Home\[email protected]_show‘);                //帖子内容页
Route::get(‘Profile/{id}‘,‘Home\[email protected]‘);                        //个人主页

创建\luntan\app\Http\Controllers\User\ArticleController.php

<?php namespace App\Http\Controllers\User;

use App\Http\Requests;
use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

use App\Article;
use App\Comment;
use App\Category;
use DB;
use Redirect, Input, Auth;
class ArticleController extends Controller {
    /**
     * 显示新建消息页面
     *
     * @return view
     */
    public function index()
    {
        $Category = Category::all();
        return view(‘user.create_article‘)->withcategory($Category);
    }

    /**
     * 处理新建消息
     *
     * @return Redirect
     */
    public function create_article(Request $request)
    {
        $this->validate($request,[
                ‘title‘ => ‘required|unique:articles|max:20‘,
                ‘content‘    => ‘required‘,
            ]);

        $article = new Article;
        $article->title = Input::get(‘title‘);
        $article->content = Input::get(‘content‘);
        $article->user_id = Auth::user()->id;
        $article->Category = Input::get(‘optionsRadios‘);
        //如果optionsRadios不等于Categorys表中任何一个id,则重定向到上边的index方法
        $c = DB::table(‘categories‘)->select(‘id‘)->get();
        $arr = array();
        foreach ($c as $key => $value) {
            $arr[] = $value->id;
        }
        if(!in_array($article->Category,$arr)){
            return Redirect::to(‘/user/article‘);//分类不合法
        };

        if ($article->save())
        {
            return Redirect::to(‘/‘);
        }
        else
        {
            return Redirect::back()->withInput()->withErrors(‘发布失败!‘);
        }
    }

    /**
     * 评论
     * @return bool
     */
    public function comments(Request $request)
    {
        $comment = new Comment;
        $comment->content = $request->content;
        $comment->article_id = $request->article_id;
        $comment->user_id = Auth::id();
        $comment->article_user_id =Article::find($request->article_id)[‘user_id‘];
        $comment->save();
        return Redirect(‘/article_show‘.‘/‘.$request->article_id);
    }

    /**
     * 帖子动态
     */
    public function me()
    {
        $c = DB::table(‘comments as c‘)
        ->leftJoin(‘articles as m‘,‘c.article_id‘,‘=‘,‘m.id‘)
        ->leftJoin(‘users as u‘,‘c.user_id‘,‘=‘,‘u.id‘)
        ->where([‘c.article_user_id‘=>Auth::id()])
        ->select(‘c.*‘,‘m.title‘,‘u.name‘,‘m.category‘)
        ->orderBy(‘c.created_at‘,‘desc‘)
        ->paginate(30);
        foreach ($c as $key => $value) {
            $find = Category::find($value->category);
            $value->color = $find->color;
            $value->categoryid = $find->id;
            $value->category = $find->name;
            $value->created_at = $this->t_time($value->created_at);
            // $value->color = Category::find($value->category)->color;
            // $value->categoryid = Category::find($value->category)->id;
            // $value->category = Category::find($value->category)->name;
            // $value->created_at = $this->t_time($value->created_at);
        }
        return view(‘user.me‘)->withc($c);
    }
}

新建帖子详情页视图\luntan\resources\views\home\article_show.blade.php

@extends(‘home/default‘)

@section(‘content‘)

<!--版式-->
<link rel="stylesheet" href="{{ asset(‘Index/css/img-list.css‘) }}">
<style type="text/css">
#asdfs{
    height: 100px;
    width: 100px;
    border-radius: 50%;
}
</style>
<div class="header">
    <h2 class="swing animated"><a href="{{URL(‘/Profile/‘)}}/{{$article_show->user_id}}" title="了解他"><img id="asdfs" src="{{asset(‘/‘)}}{{ $article_show->face }}"></a></h2>
    <h1 class="fadeInDown animated" style="font-size:18px;" title="宣布">{{ $article_show->title }}</h1>
</div>

<style type="text/css">
#tp{
    display: block;
    float: left;
    margin-top: 5px;
    margin-right: 4px;
    height: 12px;
    width: 12px;
    opacity: 0.8;
    border-radius: 6px;
}
#k{
    float: right;
}
</style>
<div class="content" style="border-bottom: 1px solid #eee;">

<?php echo $article_show->content;?>

<h3 class="content-subhead" style="border-bottom: 0px;">发布于 {{date("Y:m:d - H时i分",strtotime($article_show->created_at))}}<div id=‘k‘><span id=‘tp‘ style="background: rgb({{ $article_show->color }});"></span><a href="{{asset(‘/‘)}}{{$article_show->class_id}}">{{ $article_show->class }}</a></div></h3>
<hr>
<style type="text/css">
.img_h{width:40px;height: 40px;border-radius: 20px;}
.nc{font-size: 12px;text-align: left;color: #7e7e7e;}
#ontt{font-size: 12px;color: #252525;text-align: left;}
#tm{color: #7e7e7e;font-size: 12px;margin-right: 100px;text-align: left;}

.pl{margin: 40px;}
</style>

@foreach ($comments as $com)
<div class="pl">
    <img class="img_h"  src="{{url(‘/‘)}}/{{$com->face}}">
    <a class="nc" href="{{url(‘/Profile‘)}}/{{ $com->uid }}" alt="{{ $com->word }}">{{ $com->name }}</a><p id=‘tm‘>{{ $com->created_at }}</p>
    <p id="ontt"><?php echo $com->content;?></p>
</div>
@endforeach
    <style scoped>

        .button-success,
        .button-error,
        .button-warning,
        .button-secondary {
            color: white;
            border-radius: 4px;
            text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
             font-size: 30%;
        }

        .button-success {
            background: rgb(28, 184, 65); /* this is a green */
            position: relative;
            top: -9px;
            left: 10px;
        }

    </style>
    <style type="text/css">
.pagination {
    border-radius: 4px;
    display: inline-block;
    margin: 20px 0;
    padding-left: 0;
}
.pagination > li {
    display: inline;
}
.pagination > li > a, .pagination > li > span {
    background-color: #ffffff;
    border: 1px solid #dddddd;
    color: #337ab7;
    float: left;
    line-height: 1.42857;
    margin-left: -1px;
    padding: 6px 12px;
    position: relative;
    text-decoration: none;
}
.pagination > li:first-child > a, .pagination > li:first-child > span {
    border-bottom-left-radius: 4px;
    border-top-left-radius: 4px;
    margin-left: 0;
}
.pagination > li:last-child > a, .pagination > li:last-child > span {
    border-bottom-right-radius: 4px;
    border-top-right-radius: 4px;
}
.pagination > li > a:hover, .pagination > li > span:hover, .pagination > li > a:focus, .pagination > li > span:focus {
    background-color: #eeeeee;
    border-color: #dddddd;
    color: #23527c;
}
.pagination > .active > a, .pagination > .active > span, .pagination > .active > a:hover, .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus {
    background-color: #337ab7;
    border-color: #337ab7;
    color: #ffffff;
    cursor: default;
    z-index: 2;
}
</style>
<?php echo $comments->render(); ?>
<script type="text/javascript" src="{{ asset(‘editor/ckeditor/ckeditor.js‘) }}"></script>
<h3>发表回复</h3>
<form class="pure-form pure-form-stacked" action="{{URL(‘/user/comments‘)}}" method="POST">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="message_id" value="{{ $article_show->id }}">
<textarea id="TextArea1" cols="20" rows="2" name="content" class="ckeditor"></textarea> <br>
    <input type=‘submit‘ class=‘pure-button pure-button-default‘ value=" 发表 ">
</form>

</div>
@endsection

点击首页帖子标题出现页面

时间: 2024-11-08 00:56:03

菜鸟的蜕变:教你一步一步创建基于laravel5的简易论坛系统(3)的相关文章

教你一步一步部署.net免费空间OpenShift系列之一------帐号注册和验证

前几天有博友发布了一篇文章<一键部署mono 免费空间支持ASP.NET MVC 再也不担心伙食费换空间了>,支持MVC3和域名绑定,觉得不错,于是自己实践了一下,发现自己实际遇到的问题真不少,而且网上的关于此空间的帖子要么千篇一律,要么语焉不详,现总结为图文教程系列 帐号注册和验证 打开https://www.openshift.com/products/pricing,出现三种选择,前2种是免费的,建议选择第二个. 点击Create one跳转到创建用户界面 看到如下信息,填写邮箱和密码,

教你一步一步实现图标无缝变形切换

我的简书同步发布:教你一步一步实现图标无缝变形切换 ?欢迎打赏? 转载请注明出处:[huachao1001的专栏:http://blog.csdn.net/huachao1001] 本来这篇文章几天前就应该写好并发布出来的,由于要写小论文,被导师劈头盖脸的骂了几天,一直在搞论文,耽误了博文的编写.今天终于把小论文给投出去了,终于可以好好写博客了! 在上一篇文章<酷炫的Activity切换动画,打造更好的用户体验 >中,我们感受到了过渡切换动画带来的不一样的用户体验.如何你还意犹未尽,那么今天我

教你一步一步实现一个Promise

Promise我想现在大家都非常熟悉了,主要作用就是解决异步回调问题,这里简单介绍下. Promise规范是CommonJS规范之一,而Promise规范又分了好多种,比如 Promises/A.Promises/B.Promises/Kiss等等 有兴趣的可以到这多了解一些 http://wiki.commonjs.org/wiki/Promises 现在比较流行的是Promise/A规范,人们对它的完善和扩展,逐渐形成了Promise/A+规范,A+已脱颖而出. 说到这里规范是什么,可以去这

一步一步教你如何重装笔记本电脑系统?

本文标签:  电脑技巧 重装笔记本电脑系统 重装系统 重装dell联想宏碁电脑系统 原文地址:http://whosmall.com/?post=461 不知不觉中,已在程序猿这个职业中疯狂熬过去了3年时间,这3年虽然苹果技术天天更新,天天进步,但是如计算机常识方面却不忍心看它还是原地踏步! 从事编程时间久了,每次回家的时候,免不了会有朋友说起听说你从事计算机工作的吧,是啊,那帮我装个系统吧,最近电脑卡的要命.我家网线坏了,帮我连下网线吧!更有甚者,说我刚才误删某某重要文件,帮我恢复下吧! 你要

【Unity3D实战】零基础一步一步教你制作跑酷类游戏(填坑完整版)

在两个月前曾写了一篇<[Unity3D实战]零基础一步一步教你制作跑酷类游戏(1)>,里面一步一步演示了制作跑酷类游戏,然而由于时间原因,只写到了让角色往前移动为止.这个坑一直没有时间去填,(虽然也没多少人看啦),今天刚好有时间完成了一个跑酷类游戏的Demo.放上来给有兴趣的朋友看看. Demo源码及对应素材下载:链接:http://pan.baidu.com/s/1i4QkkuD 密码:p04w 游戏简要说明 游戏类型:跑酷类游戏(Demo,非完整游戏) 操作方式:左右方向键(可自己移植到手

Ace教你一步一步做Android新闻客户端(一)

复制粘贴了那么多博文很不好意思没点自己原创的也说不出去,现在写一篇一步一步教你做安卓新闻客户端,借此机会也是让自己把相关的技术再复习一遍,大神莫笑,专门做给新手看. 手里存了两篇,一个包括软件视图 和新手引导 软件侧滑菜单 滑动主页的GUI篇 一个内容解析篇. 代码里有很详细的注释 所以直接放代码了 有不会的站内信或者评论我会及时回复. MainActivity XML :只有一个ListView布局 <?xml version="1.0" encoding="utf-

C#WPF 语音开发教程 源代码下载 csdn tts(text to sound) 一步一步 教你制作语音软件 附图和源代码

C#WPF  语音开发教程  一步一步 教你制作语音软件 附图和源代码 效果展示 一 项目准备 1.vs2012开发平台 2.微软的语音软件库 下载:http://download.csdn.net/detail/wyx100/8431269 (含实例项目源代码) 二.开发目标 制作一个语音软件,可以朗读文字: 多个语音库:男音和女音.支持英文和中文朗读: 支持选择播放设备 支持朗读语速选择 支持音量选择 三 开发过程 1.新建WpfSpeechDemo工程 文件(vs开发平台左上角)----新

一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app

一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app 转载 作者:jrainlau 链接:https://segmentfault.com/a/1190000005844155 项目地址:https://github.com/jrainlau/wechat-subscriptor 下载&运行 git clone git@github.com:jrainlau/wechat-subscriptor.git cd wechat-subscriptor && np

【好文翻译】一步一步教你使用Spire.Doc转换Word文档格式

背景: 本文试图证明和审查Spire.Doc的格式转换能力.很长的一段时间里,为了操作文档,开发人员不得不在服务器上安装Office软件.首先,这是一个很糟糕的设计和实践.第二,微软从没打算把Office作为一个服务器组件,它也用来在服务器端解释和操作文档的.于是乎,产生了类似Spire.Doc这样的类库.当我们讨论这个问题时,值得一提的是 Office Open Xml. Office Open XML (也有非正式地称呼为 OOXML 或OpenXML) 是一种压缩的, 基于XML的文件格式