laravel学习之旅
前言:之前写了二篇YII2.0的基本mvc操作,所以,打算laravel也来这一下
*安装现在一般都用composer安装,这里就不讲述了*
一、熟悉laravel
(1)如果看到下面这个页面,就说明你已经安装好框架了

(2)认识一下目录结构

二、mvc操作
*每次增加一个控制器与方法,都要增加路由*
\routes\web.php
Route::get('/', function () {
return view('welcome');
});
Route::get('/test', 'TestController@index');
Route::get('/test/add', 'TestController@add');
Route::post('/test/add', 'TestController@add');
Route::get('/test/saveshow/{a_id}', 'TestController@saveshow');
Route::post('/test/update', 'TestController@update');
(1)控制器(c)显示方法与接收方法
/**
* 列表
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function index()
{
$model = new Article();
$condition = 'a_id>0';
$list = $model->getArticleStrsList($condition);
return view('test.index',['list'=>$list]);
} /**
* 增加
* @param Request $request
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function add(Request $request){
$model = new Article();
if($request->isMethod('post')){ // 校验
$request->validate([
'article_title' => 'required',
'author' => 'required',
]); // 进行数据操作
$article_title = $request->input('article_title','');
$author = $request->input('author','');
$insertData = array();
$insertData['article_title'] = $article_title;
$insertData['author'] = $author;
$insertData['article_content'] = '';
$model->addArticle($insertData);
return redirect('test'); }else{
return view('test/add');
}
} /**
* 更新显示方法
* @param Request $request
*/
public function saveshow($a_id){
// form参数请求
$model = new Article();
$info = $model->getOneById(array('a_id'=>$a_id));
return view('test/saveshow',['info'=>$info]);
} /**
* 更新
* @param Request $request
*/
public function update(Request $request){
// form参数请求
$model = new Article();
if($request->isMethod('post')){
// 校验
$request->validate([
'article_title' => 'required',
'author' => 'required',
'a_id'=>'required'
]); // 进行数据操作
$article_title = $request->input('article_title','');
$author = $request->input('author','');
$a_id = $request->input('a_id');
$updateData = array();
$updateData['article_title'] = $article_title;
$updateData['author'] = $author;
$updateData['article_content'] = '';
$model->editArticle($updateData,array('a_id'=>$a_id));
return redirect('test');
}
}
(二)、模型(m),自己在原来的基础上封装了一下
<?php namespace App\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB; class Article extends Model
{ public static $tableName = 'article'; /**
* 获取商品列表
* @param $condition
* @param string $field
* @param int $page
* @param string $order
* @return mixed
*/
public function getArticleList($condition, $field = '*', $page = 0, $order = 'a_id desc'){
$list = DB::table(self::$tableName)
->where($condition)
->orderBy($order)
->get();
return $list;
} /**
* 获取商品列表(通过原生字符串方式)
* @param $condition
* @param string $field
* @param int $page
* @param string $order
* @return mixed
*/
public function getArticleStrsList($condition, $field = '*', $offset = 0,$limit = 10, $order = 'a_id desc'){
$list = DB::table(self::$tableName)
->whereRaw($condition)
->orderByRaw($order)
->offset($offset)
->limit($limit)
->get();
return $list;
} /**
* 添加商品
* @param type $data
* @return type
*/
public function addArticle($data)
{
return DB::table(self::$tableName)->insertGetId($data);
}
/**
* 更新商品
* @param type $data
* @param type $condition
* @return type
*/
public function editArticle($data, $condition)
{
return DB::table(self::$tableName)->where($condition)->update($data);
} /**
* 删除商品
* @param array $condition 条件
* @return type
*/
public function delArticle($condition)
{
return DB::table(self::$tableName)->where($condition)->delete();
} /**
* 根据条件查询一条商品
*
* @param array $condition 条件
* @return array 一维数组
*/
public function getOneById($condition)
{
return DB::table(self::$tableName)->where($condition)->first();
} /**
* 根据获取总数
* @param $condition
* @return mixed
*/
public function getCount($condition){
return DB::table(self::$tableName)->where($condition)->count();
} /**
* 根据获取总数(通过原生字符串方式)
* @param $condition
* @return mixed
*/
public function getCountStrs($condition){
return DB::table(self::$tableName)->whereRaw($condition)->count();
}
}
(三)视图(v),laravel下伪造跨站请求保护 CSRF,这个一定要加上
index.blade.php
<!doctype html>
<html lang="{{ 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">
<title>Laravel</title>
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css?family=Raleway:100,600" rel="stylesheet" type="text/css">
<style>
.list{
width: 100%;
}
.list .l-l,.l-l-h{
width:100%;
text-align: center;
}
.l-l-h{
font-weight: bold;
}
.list .l-v,.l-h{
border: 1px solid #0b72b8;
display:inline-block;
width: 150px;
float:left;
padding: 0px;
margin: 0px;
text-align: center;
}
.l-h{
font-weight: bold;
}
.clear{ clear:both}
</style>
</head>
<body>
<div>
<a href="{{url('test/add')}}">添加</a>
</div>
<div class="list">
<div class="l-l-h">
<p class="l-h">
标题
</p>
<p class="l-h">
作者
</p>
<p class="l-h">
操作
</p>
<div class="clear"></div>
</div>
@foreach ($list as $key=>$value)
<div class="l-l">
<p class="l-v">
{{$value->article_title}}
</p>
<p class="l-v">
{{$value->author}}
</p>
<p class="l-v">
<a href="{{url('test/saveshow',['a_id'=>$value->a_id])}}">编辑</a>
</p>
<div class="clear"></div>
</div>
@endforeach </div>
</body>
</html>
add.blade.php
<!doctype html>
<html lang="{{ 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">
<title>Laravel学习之旅</title>
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css?family=Raleway:100,600" rel="stylesheet" type="text/css">
<style>
p{
margin: 0px;
padding: 0px;
}
</style>
</head>
<body> <!-- /resources/views/post/add.blade.php --> <h1>Create Post</h1> @if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif <!-- Create Post Form --> <div>
<form action="{{url('test/add')}}" method="post">
{{--这里要写上token,一样要加上--}}
{{ csrf_field() }}
<p>
<input type="text" name="article_title" placeholder="标题"/>
</p>
<p>
<input type="text" name="author" placeholder="作者"/>
</p>
<p>
<input type="submit" value="提交"/>
</p>
</form>
</div>
</body>
</html>
saveshow.blade.php
<!doctype html>
<html lang="{{ 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">
<title>Laravel学习之旅</title>
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css?family=Raleway:100,600" rel="stylesheet" type="text/css">
<style>
p{
margin: 0px;
padding: 0px;
}
</style>
</head>
<body>
<div>
<form action="{{url('test/update')}}" method="post">
{{--这里要写上token,一样要加上--}}
{{ csrf_field() }}
<input type="hidden" name="a_id" value="{{$info->a_id}}"/>
<p>
<input type="text" name="article_title" placeholder="标题" value="{{$info->article_title}}"/>
</p>
<p>
<input type="text" name="author" placeholder="作者" value="{{$info->author}}"/>
</p>
<p>
<input type="submit" value="提交"/>
</p>
</form>
</div>
</body>
</html>
laravel注意事项:
- 访问 laravel 出现 Parse error: syntax error, unexpected '?',说明php版本不适用当前laravel框架版本
- 视图文件是以xxxx.blade.php为后缀命名
操作网址:
laravel中文文档:https://learnku.com/docs/laravel/6.x
laravel学习之旅的更多相关文章
- Laravel学习之旅(三)
视图 一.怎么新建视图: 1.视图默认存放路径:resources/views: 2.laravel模板支持原生的PHP,直接可以在resources/views新建一个PHP文件,例如: index ...
- Laravel学习之旅(二)
控制器 一.怎么编写控制器? 1.控制器文件存放路径:app\Http\Controllers: 2.命名规范如:TestController.php 3.完整的控制器例子如下: <?php n ...
- Laravel学习之旅(一)
路由 1.简介:简单的说就是将用户的请求转发给相应的程序进行处理: 2.作用:就是建立url和程序之间的映射. 3.请求类型:get.post.put.patch.delete 相比于thinkphp ...
- WCF学习之旅—第三个示例之四(三十)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) WCF学习之旅—第三个示例之三(二十九) ...
- Hadoop学习之旅二:HDFS
本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...
- WCF学习之旅—第三个示例之二(二十八)
上接WCF学习之旅—第三个示例之一(二十七) 五.在项目BookMgr.Model创建实体类数据 第一步,安装Entity Framework 1) 使用NuGet下载最新版的Entity Fram ...
- WCF学习之旅—第三个示例之三(二十九)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) 在上一篇文章中我们创建了实体对象与接口协定,在这一篇文章中我们来学习如何创建WCF的服务端代码.具体步骤见下面. ...
- WCF学习之旅—WCF服务部署到IIS7.5(九)
上接 WCF学习之旅—WCF寄宿前的准备(八) 四.WCF服务部署到IIS7.5 我们把WCF寄宿在IIS之上,在IIS中宿主一个服务的主要优点是在发生客户端请求时宿主进程会被自动启动,并且你可以 ...
- WCF学习之旅—WCF服务部署到应用程序(十)
上接 WCF学习之旅—WCF寄宿前的准备(八) WCF学习之旅—WCF服务部署到IIS7.5(九) 五.控制台应用程序宿主 (1) 在解决方案下新建控制台输出项目 ConsoleHosting.如下 ...
随机推荐
- 关于C语言\b \t \n及转义序列的理解
转义序列 说明 \b 后退一格(Backspace) \t 水平制表(Tab=4个空格) \v 垂直制表 \r 回车(Enter) \f 换页 \a 发出鸣响 \n 换行 \" 输出/输入双 ...
- Python---环境以及编辑器的使用的学习
1.搭建python的环境 官网下载Python的安装程序,记住一点在安装的时候点一下下面的 Add Python 3.5 to PATH 它会自动给你把安装的python的环境加入到计算机的环境变量 ...
- PythonI/O进阶学习笔记_3.2面向对象编程_python的封装
前言: 本篇相关内容分为3篇多态.继承.封装,这篇为第三篇 封装. 本篇内容围绕 python基础教程这段: 在面向对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法.使 ...
- 一道算法问题:一幢 200 层的大楼,给你两个鸡蛋. 如果在第 n 层扔下鸡蛋,鸡蛋不碎,那么从前 n-1 层扔鸡蛋都不碎. 这两只鸡蛋一模一样,不碎的话可以扔无数次. 已知鸡蛋在0层扔不会碎. 提出一个策略, 要保证能测出鸡蛋恰好会碎的楼层, 并使此策略在最坏情况下所扔次数最少.
今晚要参加网易的笔试,所以一直在刷题,刷到这个题的时候觉得自己的思路很模糊,就去网上百度了一下,找到一个大神给的解决方案: 如下: (http://ppwwyyxx.com/2013/Problem- ...
- Docker下Jedis体验
jedis是redis的java版本的客户端实现,本文通过一些web请求&响应的实例展示了jedis的基本用法: 开始编码前我们先把环境准备好,总共两个server,对应两个docker容器: ...
- linux非root用户下安装软件,搭建生产环境
之前的用实验室的服务器,因为某些原因,使用的用户没有root权限.linux的非root用户很多软件无法安装,非常的不方便.我的方法是使用brew来代替系统的包管理工具.brew是最先用在mac上的包 ...
- Java网络方面
最近在面试 有些概念懂 但是需要梳理一下 借着面试看看自己会多少. 1.网络编程的同步 异步 阻塞 非阻塞? 同步:函数调用在没有得到结果之前,不返回任何结果: 异步:函数调用在没有得到结果之前,不返 ...
- java-ztest测试报告的搭建,python-BeautifulReport
今天用testng的时候感觉测试报告贼丑又慢,以下图片是对比.了解到ztest,搭建的时候发现网上没有教程,对java真是太不友好了,所以步骤记录下吧.有疑问的可进群:231733032 使用ztes ...
- @Data注解getset不起作用
在idea的setting安装Lombok插件,重启idea
- java @postconstruct初始化注解使用
1.从Java EE 5规范开始,Servlet中增加了两个影响Servlet生命周期的注解(Annotion):@PostConstruct和@PreDestroy.这两个注解被用来修饰一个非静态的 ...