好了,基础的测试通了,咱们开始增删改了

思路整理

先创建项目功能控制器

然后设置路由访问规则

然后开发项目的增删改功能

1 先创建项目的控制器

php artisan make:controller ProjectsController

生成的文件在 blog\app\Http\Controllers  这个目录下

2 设置路由访问规则,找到文件  blog\app\routes\web.php 添加如下代码

Route::resource('projects', 'ProjectsController');

Route::get('projects/show/{id}', 'ProjectsController@show');

意思是可以访问projects的控制器

3 填充 项目控制器

blog\app\http\Controllers\ProjectsController

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Projects; class ProjectsController extends Controller
{
/**
*保存
*/
public function store(Request $request)
{
$projects = new Projects;
$projects->name = $request->input('name');
$projects->author = $request->input('author');
$projects->description = $request->input('description');
if ($projects->save()) {
return redirect('projects');
} else {
return back()->withInput()->withErrors('添加失败,请重试');
}
} //更新
public function update(Request $request,$id)
{
$projects = Projects::find($id);
$projects->name = $request->input('name');
$projects->author = $request->input('author');
$projects->description = $request->input('description'); if ($projects->save()) {
return redirect('projects');
} else {
return back()->withInput()->withErrors('更新失败,请重试');
}
} //添加
public function create()
{
return view('projects.create');
} //编辑
public function edit($id)
{
$project=Projects::find($id); return view('projects.edit',compact('project'));
} //删除
public function destroy($id)
{
$project = Projects::find($id);
$project->delete();
return redirect('projects');
} //列表
public function index()
{
$projects = Projects::all();
return view('projects.index',compact('projects'));
} //显示
public function show($id)
{
$project=Projects::find($id);
return view('projects.show',compact('project'));
}
}

4 设置模板页

模板页面位置在blog\resources\views 这个位置

1)在views\layouts\app.blade.php  改成如下代码

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}"> <title>{{ config('app.name', 'Laravel') }}</title> <!-- Scripts -->
<script src="{{ asset('js/app.js') }}" defer></script> <!-- Fonts -->
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css?family=Raleway:300,400,600" rel="stylesheet" type="text/css"> <!-- Styles -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
</head>
<body>
<div id="app">
<nav class="navbar navbar-expand-md navbar-light navbar-laravel">
<div class="container">
<a class="navbar-brand" href="{{ url('/') }}">
{{ config('app.name', 'Laravel') }}
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
<span class="navbar-toggler-icon"></span>
</button> <div class="collapse navbar-collapse" id="navbarSupportedContent">
<!-- Left Side Of Navbar -->
<ul class="navbar-nav mr-auto">
<li><a href="/home">后台首页&nbsp;&nbsp;&nbsp;&nbsp;</a></li>
<li><a href="/projects">管理项目</a></li>
</ul> <!-- Right Side Of Navbar -->
<ul class="navbar-nav ml-auto">
<!-- Authentication Links -->
@guest
<li class="nav-item">
<a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
</li>
@else
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
{{ Auth::user()->name }} <span class="caret"></span>
</a> <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{{ route('logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
{{ __('Logout') }}
</a> <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
@csrf
</form>
</div>
</li>
@endguest
</ul>
</div>
</div>
</nav> <main class="py-4">
@yield('content')
</main>
</div>
</body>
</html>

其实就是在顶部增加2个链接  一个项目管理  一个后台首页  其他都是原来的代码

2)

我们新建一个projects文件夹

新建4个模板文件

create.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
<div class="row">
<div class="col-md-10 col-md-offset-1">
<div class="panel panel-default">
<div class="panel-heading">新增项目</div> <div class="panel-body"> @if (count($errors) > )
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif <form action="{{ URL('projects') }}" enctype="multipart/form-data" method="POST">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
项目标题:<input type="text" name="name" class="form-control" required="required">
<br>
项目作者:<input type="text" name="author" class="form-control" required="required">
<br> 项目内容: <textarea name="description" rows="" class="form-control"></textarea>
<br>
<button class="btn btn-lg btn-info">新增项目</button>
</form> </div>
</div>
</div>
</div>
</div>
@endsection

edit.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
<div class="row">
<div class="col-md-10 col-md-offset-1">
<div class="panel panel-default">
<div class="panel-heading">编辑项目</div> <div class="panel-body"> @if (count($errors) > )
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif <form action="{{ URL('projects/'.$project->id) }}" enctype="multipart/form-data" method="POST">
<input name="_method" type="hidden" value="PUT">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
项目标题:<input type="text" name="name" class="form-control" required="required" value="{{ $project->name }}">
<br>
项目作者:<input type="text" name="author" class="form-control" required="required" value="{{ $project->author }}">
<br> <br>
项目内容:<textarea name="description" rows="" class="form-control" required="required">{{ $project->description }}</textarea>
<br>
<button class="btn btn-lg btn-info">编辑项目</button>
</form> </div>
</div>
</div>
</div>
</div>
@endsection

index.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
<div class="row">
<div class="col-md-10 col-md-offset-1">
<div class="panel panel-default">
<div class="panel-heading">管理项目</div> <div class="panel-body">
<a href="{{ URL('projects/create') }}" class="btn btn-lg btn-primary">新增</a>
<table class="table table-striped">
<tr class="row">
<th class="col-lg-2">标题</th>
<th class="col-lg-2">作者</th>
<th class="col-lg-4">查看</th>
<th class="col-lg-1">编辑</th>
<th class="col-lg-1">删除</th>
</tr>
@foreach ($projects as $project)
<tr class="row">
<td class="col-lg-2">
{{ $project->name }}
</td>
<td class="col-lg-2">
{{ $project->author }}
</td>
<td class="col-lg-4">
<a href="{{ URL('projects/show/'.$project->id) }}" target="_blank">
{{ App\Projects::find($project->id)->name }}
</a>
</td>
<td class="col-lg-1">
<a href="{{ URL('projects/'.$project->id.'/edit') }}" class="btn btn-success">编辑</a>
</td>
<td class="col-lg-1">
<form action="{{ URL('projects/'.$project->id) }}" method="POST" style="display: inline;">
<input name="_method" type="hidden" value="DELETE">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<button type="submit" class="btn btn-danger">删除</button>
</form>
</td>
</tr>
@endforeach
</table> </div>
</div>
</div>
</div>
</div>
@endsection

show.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
<div class="row">
<div class="col-md-10 col-md-offset-1">
<div class="panel panel-default">
<div class="panel-heading">显示项目</div> <div class="panel-body"> @if (count($errors) > )
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif <input name="_method" type="hidden" value="PUT">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
项目标题:{{ $project->name }}
<br>
项目作者:{{ $project->author }}
<br>
<br> <br>
项目内容:{{ $project->description }}
<br> </div>
</div>
</div>
</div>
</div>
@endsection

5 登录后台  操作增删改查

列表

编辑

新增

显示

大功告成,增删改查

好久没玩laravel了,5.6玩下(三)的更多相关文章

  1. 好久没玩laravel了,今天玩下Laravel项目迁移步骤

    .在新的目录中克隆git远程版本库 .执行composer install安装依赖 .执行php artisan key:generate生成key 好久没玩laravel了,今天玩下Laravel项 ...

  2. 好久没玩docker了,温下手

    好久没玩docker了,温下手 安装 Docker Docker 软件包已经包括在默认的 CentOS-Extras 软件源里.因此想要安装 docker,只需要运行下面的 yum 命令: yum i ...

  3. 好久没来了,重出江湖,共享个python34+pyqt+pyserial串口工具源码

    真的是好久没来了,写博客对我来说还真是难坚持下来,热度一过就忘了,就算什么时候想起来也懒得去敲一个字,这次真不知道能坚持多久,随心吧,想写写,不想写也不勉强自己. 最近由于工作调试需要自己写了一个带图 ...

  4. 通通玩blend美工(6)下——仿iPhone滚动选择器的ListBox(交互逻辑)

    原文:通通玩blend美工(6)下--仿iPhone滚动选择器的ListBox(交互逻辑) 上一篇我们已经把界面画出来了,这篇我们就来制作交互的逻辑吧.上一篇的电梯: http://www.cnblo ...

  5. kotlin电商学习记录,好久没来逛逛了

    好久没来,一直做毕业设计,用kotlin写一个基于以图搜图的购物app,现在又赶上实习,内容多,时间少,不过前途光明并由贵人指点.加油 kotlin电商学习记录 技术选型 视图层 kotlin-and ...

  6. 好久没写原生的PHP调用数据库代码了分享个

    好久没写原生的PHP代码调用数据库了 eader("Content-type: text/html; charset=utf-8"); $time=$symptoms=$attr= ...

  7. Laravel大型项目系列教程(三)之发表文章

    Laravel大型项目系列教程(三)之发表文章 一.前言 上一节教程中完成了用户管理,这节教程将大概完成发表Markdown格式文章并展示的功能. 二.Let's go 1.数据库迁移 文章模块中我们 ...

  8. Laravel 解决在ajax 请求下不能保存session的问题

    Laravel 解决在ajax 请求下不能保存session的问题 \Session::put('isLogin',true); // 你要保存的session key \Session::put(' ...

  9. 好久没玩laravel了,5.6玩下(二)

    做个项目的增删改查 第一步  把数据库的表结构建好,生成迁移 1 怎么建,当然是用php artisan命令了 使用 Artisan 命令 make:migration 来创建一个新的迁移: php ...

随机推荐

  1. 51Nod 1002:数塔取数问题(DP)

    1002 数塔取数问题  基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 一个高度为N的由正整数组成的三角形,从上走到下,求经过的数字和的最大值. 每 ...

  2. (8)propetry装饰器

    propetry是一个内置函数,用来将一个功能伪装成一个数据属性 property将一个方法伪装成一个数据属性class People: def __init__(self,name,height,w ...

  3. CTF-练习平台-Misc之 图片又隐写

    八.图片又隐写 修改后缀名为zip,打开解压出两个文件 解压发现有密码,用WinHex打开发现文件头是zip的,所以出来把后缀名改为zip,再用工具爆破 最后得到解压密码,解压后是一个图片,改后缀名为 ...

  4. java导出Excel 好文收藏

    http://www.cnblogs.com/Damon-Luo/p/5919656.html https://www.cnblogs.com/klguang/p/6425422.html

  5. 剑指offer-int类型负数补码中1的个数-位操作

    在java中Interger类型表示的最大数是 System.out.println(Integer.MAX_VALUE);//打印最大整数:2147483647 这个最大整数的二进制表示,头部少了一 ...

  6. GridView实现数据编辑和删除

    <asp:GridView ID="gv_Emplogin" runat="server" AutoGenerateColumns="False ...

  7. VPC/VM/VBOX安装GHOST版的无法启动系统

    本人最近在安装一些公司的虚拟机,方便开发使用,不用每次都安装几个小时的装机和安装软件,但是本次却遇到了一点问题,虚拟机安装完成后一直无法进入系统,只有一个光标在黑色的屏幕上一闪一闪的,也没有任何错误提 ...

  8. Python中的类(classes)

    Python的类机制使用尽可能少的新语法和语义将类引入语言.python的类提供了面向对象程序设计语言所有的 标准特性:类继承机制允许有多个基类,一个派生类可以覆盖基类中的任何方法,一个方法可以使用相 ...

  9. QString和char字符串数组之间的转换 (转)

    做串口通信时,碰到这样的问题,在Qt的界面中,我用QLineEdit对象负责显示发送和接收的文本,对其中的数据进行读取和显示使用的数据类型都是QString:但是,在对串口设备进行读写时,数据使用的形 ...

  10. C# Request.Params与Request.QueryString 的区别

    1.Request.Params包含Request.QueryString,request.form.request.cookies和request.servervariables.这几种查找的时候会 ...