Laravel(一)
环境准备
通过<a href = "http://phpstudy.php.cn/">phpStudy</a>搭建PHP运行环境
切换到php5.6或以上版本
在对应版本的php.ini中开启openssl、mbstring、pdo、fileinfo扩展
extension = php_openssl.dll
= php_mbstring.dll
=php_pdo_mysql.dll
=php_fileinfo.dll
date.timezone = PRC
并将php加入到环境变量中...
laravel概述
什么是laravel
就是用PHP写的一个框架 注: 目前最流行的PHP框架.基于symfony开发
官网:https://laravel.com/
地址:http://laravelacademy.org/
地址:http://www.golaravel.com/
地址:https://laravel-china.org/
laravel常见的类库(top100):
https://laravel-china.org/topics/2530/the-highest-amount-of-downloads-of-the-100-laravel-extensions-recommended
laravel框架相对于其他框架优势
提供了强大的工具用于开发大型/健壮的应用,如: 反向路由,数据迁移,数据填充,数据验证,缓存,会话技术等等常用的工具和功能
强大路由(route)
1)路由区别
Laravel - 反向路由/显式路由
TP5 - 反向路由/显式路由
TP3.2 - 隐式路由
2)区别
显式路由:需要正则匹配,性能低(注:laravel5.3+已缓存)
隐式路由:可扩展性差
数据填充(seeder)
开发阶段快速插入测试数据
数据迁移(migration)
就是用PHP管理数据库 (增强数据库操作安全 , 版本控制)
使用Composer管理项目
命令行工具(artisan):加快项目开发(很多手动的工作都自动了)
Blade模版引擎:同Smarty模板引擎(1-运行快,2-学习成本低)
laravel的安装
下载地址:http://laravelacademy.org/resources-download
解压到指定虚拟主机目录 /public下
laravel的目录结构.png
创建控制器
方法一: artisan 命令创建
在根目录下 打开cmd 命令: php artisan make:controller 平台名\控制器名Controller
artisan命令.png
方法二: 手动创建
直接复制已经创建好的控制器即可 --...
路由
js闭包
//概念:在JS中当一个函数执行时可以让其内部局部变量不受其他作用域影响,
//同时当前函数执行完毕后还可能让其内部变量常驻内存不销毁的运行机制被称为JavaScript的闭包。
//定义:两个函数彼此嵌套,并返回内部函数
function fn1() {
function fn2() {
}
return fn2; //脚下留心:不能加小括号
}
PHP闭包函数(php5.3+)
匿名函数,也叫闭包函数,允许临时创建一个没有指定名称的函数,经常用做回调函数参数的值
路由的作用
什么是路由: 就是网站
什么是路由参数: 就是网址参数
作用: 声明交给那个控制器的那个方法处理
配置路由
Route::HTTP请求方式(url,闭包或控制器方法)
注:
&响应多个HTTP请求
&Route::match(['get', 'post'], 请求的URL, 闭包函数或控制器方法)
&响应所有HTTP请求
&Route::any( 请求的URL, 闭包函数或控制器方法)
HTTP请求方式
HTTP请求方式有get、post、put、delete等等,常用get和post
#get方式
Route::get('/day1/t1', function(){
echo 123;
});
Route::get('/day1/t2', 'Admin\Day1Controller@t2');
#post方式
Route::post('/msg/add', 'Admin\MsgController@add');
Route::post('/day1/t3', function(){
echo 456;
});
#所有
Route::any('/msg/ajax', 'Admin\MsgController@ajax');
路由参数
语法:
Route::HTTP请求类型(请求URL/{参数名},闭包函数或控制器方法)->where(参数名,正则表达式)
#路由参数
#语法:Route::Http请求方式(请求URL地址/{name},闭包函数或控制器方法)->where(参数名,正则表达式)
#一个参数路由
Route::get('/day1/t7/{name}', function($name){
echo 't7,参数:'.$name;
});
#多个参数路由
Route::get('/day1/t8/{name}/{age}', function($name, $age){
echo 't8,参数1:'.$name.',参数2:'.$age;
});
#含默认值得参数路由
Route::get('/day1/t9/{name?}/{age?}', function($name = '小泽', $age = 18){
echo 't9,参数1:'.$name.',参数2:'.$age;
正则表达式限制参数
#限制一个参数
Route::get('/day1/t10/{name}', function($name){
echo 't10,参数:'.$name;
})->where('name', '\w+');
#限制多个参数
Route::get('/day1/t11/{name}/{age}', function($name, $age){
echo 't11,参数1:'.$name.',参数2:'.$age;
})->where(['name' =>'\w+', 'age' =>'\d+' ]);
路由群组
提取多个路由之间相同的部分
减少冗余
语法:
Route::group([属性1=>值1,....,属性2=>值2], function(){
Route::http请求类型(请求URL,闭包函数或控制器方法)->where(参数名,正则)
...........
Route::http请求类型(请求URL,闭包函数或控制器方法)->where(参数名,正则)
})
//路由群组:减少冗余
Route::group(['prefix'=> 'user', 'namespace'=> 'Admin'], function(){
Route::get('index', 'UserController@index');
Route::get('add', 'UserController@add');
Route::get('edit', 'UserController@edit');
Route::get('del', 'UserController@del');
});
视图
控制器调用视图
return view(视图名称,compact(变量1,变量2......变量n));
注:
视图默认在resources/views目录下:【文件扩展名.php】或者【xxx.blade.php】(注:统一小写)
调用resources/views/子目录中的文件则用“.”拼接
compact函数
根据变量名创建数组
compact.png
blade模板
blade相当于smarty 都是模板引擎
blade视图文件使用.blade.php作为文件扩展名
blade模板标签
<!-- 这是HTML注释 -->
{{-- 这是Blade模板引擎注释 --}}
<hr />
<?php
$name = '小泽';
$users = [
['name'=>'z1', 'age'=>111],
['name'=>'z2', 'age'=>222],
['name'=>'z3', 'age'=>333]
];
?>
<?php echo $name; ?>
<br />
{{ $name }}
<hr />
@foreach($users as $user)
{{ $user['name'] }} __ {{ $user['age'] }} <br />
@endforeach
<hr />
@if ($name == '小泽')
123
@elseif ($name == '小仓')
456
@else
789
@endif
<hr />
@php
echo $name;
@endphp
获取请求输入
语法:$request->isMethod() 判断请求类型
方法一 :
Ø 步骤1:导入命名空间【use Illuminate\Http\Request】
Ø 步骤2:在控制器方法形参处声明Request类的注入
Ø 步骤3:通过下属命令获取数据
$request->all() 获取所有数据
$request->input(参数名,默认值) 获取单个数据
$request->only([参数名1,...,参数名n]) 获取指定数据
$request->except([参数名1,...,参数名n]) 获取指定数据外的所有数据
查看更多:http://laravelacademy.org/post/6750.html#toc_4
方法二:
Ø 步骤1:导入命名空间【use Illuminate\Support\Facades\Input;】
步骤2:通过下属命令获取数据
Input::all() 获取所有数据
Input::get(参数名[,默认值]) 获取单个数据
Input::only([键1,...,键n]) 获取指定数据
Input::except([键1,...,键n]) 获取指定数据外的所有数据
//接受参数
public function t14(Request $request)
{
//练习1:判断请求方式返回bool
var_dump($request->isMethod('get'));
echo '<hr />';
var_dump($request->isMethod('post'));
echo '<hr />';
//练习2:获取全部数据
var_dump($request->all());
echo '<hr />';
//练习3:获取指定数据
var_dump($request->input('name'));
}
留言板
查询语法:
查询所有数据语法:DB::table(表名)->get()
插入数据语法:DB::table(表名)->insert(关联数组)
准备数据库...
插入测试数据...
修改配置文件 .env
步骤1:定义路由,通过get方式请求/msg交给Msg控制器的index方法处理
步骤2:创建Msg控制器和index方法传递数据并加载视图
步骤3:创建视图并循环显示数据
使用get方式定义路由
Route::get('/msg','home/MsgController@index');
创建msg控制器和index方法并加载视图
php artisan make:controller Home/MsgController
<?php
namespace App\Http\Controllers\Home;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
/**
* 留言板控制器
* @author 喜华
* @package App\Http\Controllers\Home
*/
class MsgController extends Controller
{
//列表
public function index()
{
#1.获取数据
$msgs = DB::table('msg')->get();
#2.加载resources\views\home\msg\index.blade.php文件并传递数据
return view('home.msg.index', compact('msgs'));
}
}
创建视图并循环实现数据
@foreach($msgs as $msg)
<li class="green bounceInDown">
<h3>
<img src="{{ asset('message') }}/logo100x100.jpg">
{{ $msg->uname }}<span>{{ date('Y-m-d H:i:s',$msg->created_at) }}</span>
<div class="clr"></div>
</h3>
<dl>
<dt class="hfinfo">{{ $msg->content }}</dt>
</dl>
</li>
@endforeach
添加留言
步骤1:修改静态页面表单相关数据
步骤2:定义路由,通过post方式请求/msg/add交给Msg控制器的add方法处理
步骤3:创建控制器方法处理数据并跳转到列表页
<form action = "{{ url('msg/add') }}" method="post"></form>
定义路由
Route::get('/msg','home/MsgController@add');
创建控制器方法处理数据并跳转到列表页
<?php
namespace App\Http\Controllers\Home;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
/**
* 留言板控制器
* @author 喜华
* @package App\Http\Controllers\Home
*/
class MsgController extends Controller
{
//添加
public function add(Request $request)
{
//1.判断是否post请求
if ($request->isMethod('post')) {
//2.接受数据
$postData = $request->only(['uname', 'content']);
$postData['created_at'] = $postData['updated_at'] = time();
//3.插入数据
$rs = DB::table('msg')->insert($postData);
//4.判断
if ($rs) {
return redirect(url('msg'));
} else {
return redirect(url('msg'));
}
}
}
//列表
public function index()
{
#1.获取数据
$msgs = DB::table('msg')->get();
#2.加载resources\views\home\msg\index.blade.php文件并传递数据
return view('home.msg.index', compact('msgs'));
}
}
小结
什么是Laravel:就是用PHP写的框架
Laravel目录
数据库配置文件:/.env (因为config/database.php读取的是.env文件中的数据)
控制器目录:/app/Http/Controllers/平台名/控制器名Controller.php
模型目录:/app/Http/Models (注:该目录手动创建)
视图目录:/resources/views
路由文件:/routes/web.php
创建控制器语法:php artisan make:controller 平台名\控制器名Controller
路由语法:Route::http请求方式(请求URL/{参数名},闭包函数或控制器方法)->where('参数名', 正则)
视图调用:return view(视图名,compact(变量名1,...,变量名n))
Blade模板
显示数据:{{ $变量名 }}
判断
@if()
@elseif()
@else
@endif
循环
@foreach()
@endforeach
接受数据
步骤1:导入命令空间
use Illuminate\Http\Request;
步骤2:实例化$request对象
步骤3:调用方法
获取全部数据 $request->all()
获取多个数据 $request->only([键,...,键])
获取单个数据 $request->input(键,默认值)







网友评论