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

思路整理

先创建项目功能控制器

然后设置路由访问规则

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

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. 一定要记住这20种PS技术,让你的照片美的不行! - imsoft.cnblogs

    照片名称:调出照片柔和的蓝黄色-简单方法, 1.打开原图素材,按Ctrl + J把背景图层复制一层,点通道面板,选择蓝色通道,图像 > 应用图像,图层为背景,混合为正片叠底,不透明度50%,反相 ...

  2. test20181004 排列

    题意 分析 容斥公式的意义 选了原图中\(x(x \geq i)\)条边的方案,重复了\(\binom{x}{i}\)次. 有多加多减,所以就是那个式子. 具体而言,对选了x条原图中的边的方案,总共加 ...

  3. LeetCode Pascal's Triangle && Pascal's Triangle II Python

    Pascal's Triangle Given numRows, generate the first numRows of Pascal's triangle. For example, given ...

  4. Hadoop伪分布模式操作

    http://blog.csdn.net/wangloveall/article/details/20195813 摘要:本文介绍Hadoop伪分布模式操作,适合于Hadoop学习.开发和调试. 关键 ...

  5. Keepalived+HAProxy实现RabbtiMQ高可用的负载均衡

    HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案,包括Twitter,Reddit,StackOverflow,GitHub在 ...

  6. My Router

    新路由 型号:Y1 CPU:单核 链接终端:2 路由系统版本:1.6.6.171.6.9.17 运行时长:0天0小时17分13秒 MAC地址:20:76:93:28:CA:24   LAN口状态 MA ...

  7. AtomicStampedReference、AtomicMarkableReference 区别

    AtomicMarkableReference 描述的是更加简单的是与否的关系,它的定义就是将数据变换为true 或 false,通常ABA问题只有两种状态,AtomicMarkableReferen ...

  8. spring4 知识点

    1 bean的 创建 1,直接在配置文件里面写一个带有@Bean注解的方法(返回值就是那个bena对象),(name等于 方法名) 2,使用 FactoryBean 接口(三个方法分别是创建,类型,单 ...

  9. 【appium】keyevent的keycode

    方法1 AppiumDriver实现了在上述功能,代码如下(java版本) driver.sendKeyEvent(66); 方法2 HashMap<String, Integer> ke ...

  10. GRUB 启动 WIN PE 镜像(ISO)

    我用的这个WIN PE ISO只有 46M. 再大些的就没试过了. PE ISO 命名为 minipe.iso. 放在第一块硬盘的第二个分区. MENU.LST的内容. title WinPemap ...