最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

Laravel大型项目系列教程(五)

来源:动视网 责编:小OO 时间:2025-09-30 22:14:24
文档

Laravel大型项目系列教程(五)

Laravel大型项目系列教程(五)文章和标签管理一、前言本节教程将大概完成文章和标签管理以及标签关联。二、Let'sgo1.文章管理首先创建管理后台文章列表视图:$phpartisangenerate:viewadmin.articles.list修改views/admin/articles/list.blade.php:@extends('_layouts.default')@section('main')TitleTagsAuthorManagment@foreach($articles
推荐度:
导读Laravel大型项目系列教程(五)文章和标签管理一、前言本节教程将大概完成文章和标签管理以及标签关联。二、Let'sgo1.文章管理首先创建管理后台文章列表视图:$phpartisangenerate:viewadmin.articles.list修改views/admin/articles/list.blade.php:@extends('_layouts.default')@section('main')TitleTagsAuthorManagment@foreach($articles
Laravel大型项目系列教程(五)

文章和标签管理

一、前言

本节教程将大概完成文章和标签管理以及标签关联。

二、Let's go

1.文章管理

首先创建管理后台文章列表视图:

$ php artisan generate:view admin.articles.list

修改views/admin/articles/list.blade.php:

@extends('_layouts.default')@section('main')

@foreach ($articles as $article) @endforeach
Title Tags Author Managment
{{{ $article->title }}} @foreach ($article->tags as $tag){{ $tag->name }} @endforeach {{{ $article->user->nickname }}} Edit {{ Form::open(array('url' => 'article/' . $article->id, 'method' => 'DELETE', 'style' => 'display: inline;')) }} {{ Form::close() }}

NoYes

@stop

在nav.blade.php中增加一个Articles的超链接:

  • Articles
  • 创建一个管理员控制器,在app/controllers下创建一个名为AdminController.php的文件,修改:

    class AdminController extends \\BaseController { public function articles() { return View::make('admin.articles.list')->with('articles', Article::with('user', 'tags')->orderBy('created_at', 'desc')->get())->with('page', 'articles'); }}

    在Route::group(array('prefix' => 'admin')中增加:

    Route::get('articles', 'AdminController@articles');

    管理文章可以重用上节教程写的业务逻辑,修改下ArticleController.php,把destroy()中最后的Redirect::to('home')改成Redirect::back(), 再修改一下home.blade.php,加一个是否是管理员的判断,这样当点击作者跳转到用户主页时,除了作者自己管理员也能操作文章:

    @if ($user->id == Auth::id() or (Auth::check() and Auth::user()->is_admin))

    现在点击导航栏的Articles,就会出现所有的文章:

    这样管理员就可以操作所有的文章了。

    我们还可以再修改下admin/users/list.blade.php,当点击用户列表的昵称时也会跳转到用户主页:

    {{{ $user->nickname }}}

    现在访问用户列表页面:

    2.显示标签列表

    创建一个标签列表视图:

    $ php artisan generate:view admin.tags.list

    修改admin/tags/list.blade.php:

    @extends('_layouts.default')@section('main')

    @foreach ($tags as $tag) @endforeach
    TagName ArticleCount CreateDateTime Managment
    {{{ $tag->name }}} {{ $tag->count }} {{ $tag->created_at->format('Y-m-d H:i') }} Edit {{ Form::open(array('url' => 'tag/' . $tag->id, 'method' => 'DELETE', 'style' => 'display: inline;')) }} {{ Form::close() }}
    NoYes

    @stop

    再在nav.blade.php中增加Tags选项:

  • Tags
  • 在Route::group(array('prefix' => 'admin')中增加:

    Route::get('tags', 'AdminController@tags');

    在AdminController.php中增加:

    public function tags() { return View::make('admin.tags.list')->with('tags', Tag::where('count', '>', '0')->orderBy('count', 'desc')->orderBy('updated_at', 'desc')->get())->with('page', 'tags');}

    现在点击导航栏上方的Tags超链接:

    3.修改标签

    创建修改标签的视图:

    $ php artisan generate:view tags.edit

    修改views/tags/edit.blade.php:

    @extends('_layouts.default')@section('main')

    Edit Tag


    @if (Session::has('message'))

    {{ Session::get('message')['content'] }}

    @endif @if ($errors->has())

    {{ $errors->first() }}

    @endif {{ Form::model($tag, array('url' => URL::route('tag.update', $tag->id), 'method' => 'PUT', 'class' => "am-form")) }} {{ Form::label('name', 'TagName') }} {{ Form::text('name', Input::old('name')) }}

    {{ Form::close() }}

    @stop

    创建标签控制器:

    $ php artisan generate:controller TagsController

    修改TagsController.php:

    public function __construct(){ $this->beforeFilter('auth', array('only' => array('create', 'store', 'edit', 'update', 'destroy'))); $this->beforeFilter('csrf', array('only' => array('store', 'update', 'destroy')));}public function edit($id){ return View::make('tags.edit')->with('tag', Tag::find($id));}public function update($id){ $rules = array( 'name' => array('required', 'regex:/^\\w+$/'), ); $validator = Validator::make(Input::only('name'), $rules); if ($validator->passes()) { Tag::find($id)->update(Input::only('name')); return Redirect::back()->with('message', array('type' => 'success', 'content' => 'Modify tag successfully')); } else { return Redirect::back()->withInput()->withErrors($validator); }}

    把这个控制器加到routes.php中:

    Route::resource('tag', 'TagController');

    现在就能修改标签了:

    4.删除标签

    修改TagsController.php:

    public function destroy($id){ $tag = Tag::find($id); $tag->count = 0; $tag->save(); foreach ($tag->articles as $article) { $tag->articles()->detach($article->id); } return Redirect::back();}

    我这里删除标签只是把它的文章数置为0,然后清除与相关文章的关联,你可以自己试下删除一个标签,再看看文章的标签是否去除了。

    5.关联标签

    当我们点击首页文章、标签栏和显示文章内容的标签的时候应该跳转到显示相应标签下所有文章的页面:

    我们对上述地方加上超链接地址:

    {{ $tag->name }}

    创建指定标签的文章列表视图:

    $ php artisan generate:view articles.specificTag

    修改views/articles/specificTag.blade.php:

    @extends('_layouts.default')@section('main')

    Tag:{{{ $tag->name }}}
    @foreach ($articles as $article) @endforeach {{ $articles->links() }} @stop

    在TagController.php增加:

    public function articles($id){ $tag = Tag::find($id); $articles = $tag->articles()->orderBy('created_at', 'desc')->paginate(10); return View::make('articles.specificTag')->with('tag', $tag)->with('articles', $articles);}

    在routes.php的Route::resource('tag', 'TagController');的上方增加:

    Route::get('tag/{id}/articles', 'TagController@articles');

    现在当我们点击页面上的标签时,就会显示该标签下的所有文章了:

    6.显示所有标签

    我们还需要一个显示所有标签的页面,先创建视图:

    $ php artisan generate:view tags.list

    修改views/tags/list.blade.php:

    @extends('_layouts.default')@section('main')

    All Tags


    @foreach ($tags as $tag) {{{ $tag->name }}} {{ $tag->count }} @endforeach

    @stop

    现在点击首页的Tags链接时就会跳转到显示所有标签的页面了:

    7.小结

    本节教程就到此结束了,这个博客系统想要实现的功能也基本完成了,下节开始将讲解优化、单元测试、部署和扩展开发等内容,你可以继续完善,例如在管理文章和标签的时候提供一个搜索功能,给它们都加上分页,在首页加上一个搜索文章的功能,给文章加上评能等等,在评能方面现在有很多第三方评论插件,可以快速帮你实现。

    最后的代码下载:

    $ git clone https://github.com/shiyanlou/laravel-blog-5.git

    本文详细出处:http://www.shiyanlou.com/courses/123

    文档

    Laravel大型项目系列教程(五)

    Laravel大型项目系列教程(五)文章和标签管理一、前言本节教程将大概完成文章和标签管理以及标签关联。二、Let'sgo1.文章管理首先创建管理后台文章列表视图:$phpartisangenerate:viewadmin.articles.list修改views/admin/articles/list.blade.php:@extends('_layouts.default')@section('main')TitleTagsAuthorManagment@foreach($articles
    推荐度:
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top