导图社区 Laravel
这是一篇关于Laravel的思维导图,主要内容有运行环境要求、安装、配置、路由、中间件、控制器等。
编辑于2022-07-16 10:36:08laravel
运行环境要求
PHP 版本 >= 5.5.9
Mcrypt PHP 扩展
php的加密扩展,提供多种加密算法
openssl扩展
对传输的数据进行加密
mbstring 扩展
mbstring 提供了针对多字节字符串的函数,能够帮你处理 PHP 中的多字节编码
Tokenizer PHP 扩展
php代码解析
安装
1 composer安装
composer create-project laravel/laravel your-project-name --prefer-dist "5.1.*"
2 直接复制一份安装好的即可
配置
开发前必须要做的
配置虚拟主机
storage 和 vendor 目录要让服务器有写入的权限。
在linux下一定要注意 如果没有写权限 会出现空白页面
程序秘钥
这里是默认生成的 如果没有的话可以使用命令 php artisan key:generate 然后将生成的随机字符串放置在 .env文件中
如果没有key会报错 No supported encrypter found. The cipher and / or key length are invalid.
修改时区
config/app.php >>>>> 'timezone' => 'PRC',
开发过程中要用到的
读取和设置配置
Config::get('app.timezone');
Config::set('app.locale', 'cn');
获取环境配置
env('DB_HOST')
关闭和启动应用
关闭 php artisan down
模板配置 resources/views/errors/503.blade.php
启动 php artisan up
URL重写
apache
在网站根目录下创建.htaccess文件 Options +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L]
nginx
在ngnix配置文件中添加 location / { try_files $uri $uri/ /index.php?$query_string; }
路由
文件位置
app/Http/routes.php
基本路由
Route::get('/love', function(){return '弄啥来'})
Route::post('/insert', function(){})
Route::put(....)
Route::delete('....');
带参数的路由
普通使用
Route::get('/goods/{id}', function($id){ echo $id; });
限制参数类型
Route::get('/param/{name}', function($name){ return $name; })->where('name','[a-z]+');
传递多个参数
Route::get('/getParams/{name}-{id}', function($name, $id){ //请求对象 // echo $request->route('name'); // echo $request->route('id'); });
路由别名
Route::get('/Home/Goods/show/{id}', ['as'=>'goods', function($id){ //普通创建url // echo url('/param/hahah').'<br>'; //路由别名创建url // echo route('goods',['id'=>11]).'<br>'; //实现页面跳转 // return redirect()->route('goods',['id'=>12]); //获取路由名称 return Route::currentRouteName(); }]);
路由组设置
Route::group([], function(){ Route::get('/404', function(){ abort(404,'not found!!!'); }); });
404页面设置
abort(404,'么有找到相关的页面呀!!!');
设置模板 -> resources/views/errors/404.blade.php
中间件
1.创建(默认不直接生效)
php artisan make:middleware LoginMiddleware
2.事例代码
<?php namespace App\Http\Middleware; use Closure; class LoginMiddleware { public function handle($request, Closure $next) { //request变量 记录所有的请求参数 if(!$request->cookie('uid')) { return redirect('/'); } return $next($request); } }
3.注册
全局注册
Kernel.php >>>> $middleware成员属性 protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \app\Http\Middleware\TestMiddleware::class ];
路由注册
Kernel.php >>>> $routeMiddleware成员属性 protected $routeMiddleware = [ 'auth' => \app\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class, 'guest' => \app\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'test' => \app\Http\Middleware\TestMiddleware::class, ];
4.使用
Route::get('/middle', ['middleware'=>'test', function(){ return 'iloveyou'; }]);
Route::get('/mm', function(){ return 'mm'; })->middleware('test');
控制器
创建控制器
php artisan make:controller UserController
php artisan make:controller UserController --plain
路由以及访问
普通访问
Route::get('/User/add', 'UserController@add');
带参数访问
Route::get('/User/edit/{id}', 'UserController@edit');
别名
设置 Route::get('/User/index', ['uses' => 'UserController@index','as' => 'user']);
使用 route('user')
中间件控制
Route::get('/user/edit/{id}', [ 'middleware' => 'login', 'uses' => 'TestController@edit'] );
Route::get('/user/edit/{id}', 'TestController@edit')->middleware('login');
隐式控制器
路由
Route::controller('users', 'UserController');
使用
<?php namespace App\Http\Controllers; class UserController extends Controller { /** * 响应/users的GET请求 */ public function getIndex() { // } /** * 响应/users/show/1的GET请求 */ public function getShow($id) { // } }
restful控制器
请求
基本信息获取
获取请求方法
$request->method();
获取完整url
$request->url();
检测方法
$request->isMethod('post')
请求路径
$request->path()
获取ip
$request->ip()
获取端口
$request->getPort()
提取请求参数
基本获取
$name = $request->input('name');
设置默认值
$request->input('name', 'Sally');
检测是否存在
$request->has('name')
提取所有的参数
$input = $request->all();
提取部分
$request->only(['username', 'password']);
$request->except(['credit_card']);
获取头信息
$request->header('Connection')
文件操作
检测是否有文件上传
$request->hasFile('photo')
将文件移动到指定位置
$request->file('photo')->move('./uploads/', 'iloveyou.jpg');
cookie操作
设置
\Cookie::queue('name','iloveyou',10);
return response('haha')->withCookie('uid',10,10);
读取
\Cookie::get('name');
$request->cookie('name');
闪存信息
将所有的请求参数写入闪存中
$request->flash()
将部分参数写入闪存中
$request->flashOnly('title','price')
除去某些参数之外的参数
$request->flashExcept('_token');
简便使用
return back()->withInput();
响应
返回字符串
return '哈哈哈';
设置cookie
return response('')->withCookie('id',20,60);
返回json
return response()->json(['a'=>100,'b'=>2000]);
下载文件
return response()->download('web.config');
页面跳转
return redirect('/goods/add');
显示模板
return response()->view('goods.add');
视图
解析模板
view('user.add');
分配数据到模板
view('user.edit',['username'=>'admin'])
模板引擎blade
模板的默认存放位置
resources/views
设置默认值
{{$username or 'guest'}}
显示html代码
{!! $name !!}
引入子视图
@include('header')
模版继承
占位符
@yield('title')
@section('content') @show
新模板内容
@extends('index')
@section('title', 'new Title')
@section('content') new contents is here @endsection
使用变量
{{$username}}
Subtopic
使用函数
{{time()}}
流程控制
@if (count($records) === 1) I have one record! @elseif (count($records) > 1) I have multiple records! @else I don't have any records! @endif
循环控制
@for ($i = 0; $i < 10; $i++) The current value is {{ $i }} @endfor
@foreach ($users as $user) <p>This is user {{ $user->id }}</p> @endforeach
数据库操作
支持的数据库类型
MySQL Postgres SQLite SQL Server
数据库连接配置
文件位置 config/database.php
结果集的返回类型 'fetch' => PDO::FETCH_ASSOC
.env环境快速配置
数据库基本操作
查询
DB::select
插入
DB::insert
更新
DB::update
删除
DB::delete
一般语句
DB::statement('drop table users');
事务操作
DB::beginTransaction
DB::rollBack()
DB::commit()
操作多个数据库
DB::connection('foo')->select(...)
构造器
增删改查
插入
单条
DB::table('users')->insert( ['email' => 'john@example.com', 'votes' => 0] );
多条
DB::table('users')->insert([ ['email' => 'taylor@example.com', 'votes' => 0], ['email' => 'dayle@example.com', 'votes' => 0] ]);
获取id插入
$id = DB::table('users')->insertGetId( ['email' => 'john@example.com', 'votes' => 0] );
更新
DB::table('users') ->where('id', 1) ->update(['votes' => 1]);
删除
DB::table('users')->where('votes', '<', 100)->delete();
查询
查询所有
DB::table('users')->get()
查询单条
DB::table('users')->first()
查询单条结果中的某个字段
DB::table('user')->value('username')
获取一列数据
DB::table('user')->lists('username')
连贯操作
设置字段
DB::table('users')->select('name', 'email as user_email')->get()
条件
DB::table('users') ->where('name', 'like', 'T%') ->get()
DB::table('users') ->where('votes', '>', 100) ->orWhere('name', 'John') ->get();
DB::table('users') ->whereBetween('votes', [1, 100])->get()
DB::table('users') ->whereIn('id', [1, 2, 3]) ->get()
排序
orderBy('name', 'desc')
分页
DB::table('users')->skip(10)->take(5)->get();
连接表(join)
DB::table('users') ->join('contacts', 'users.id', '=', 'contacts.user_id') ->join('orders', 'users.id', '=', 'orders.user_id') ->select('users.*', 'contacts.phone', 'orders.price') ->get();
计算
总数
DB::table('users')->count()
最大值
DB::table('orders')->max('price')
平均值
DB::table('orders')->avg('price')
sql语句记录
App/Providers/AppServiceProvider.php boot方法中添加 DB::listen(function($sql, $bindings, $time){ //写入sql file_put_contents('.sqls', "[".date('Y-m-d H:i:s')."]".$sql."\r\n", FILE_APPEND); });
Event::listen('illuminate.query',function($query){ var_dump($query); });
设置自定义函数和自定义类文件
app/library/helper.php
在项目下的composer.json中添加信息 "autoload": { "classmap": [ "database" ], "psr-4": { "App\\": "app/" }, "files":[ "app/Library/helper.php" ] },
composer dump-auto
调试工具
debugbar安装
composer require barryvdh/laravel-debugbar
在config/app.php里面的providers添加 Barryvdh\Debugbar\ServiceProvider::class,
chrome插件postman