laravel 入门指南
2019独角兽企业重金招聘Python工程师标准>>>
参考 https://laravelacademy.org/
本文基于laravel文档总结
文档中有些概念解析的不是特别清楚,特此总结一下
概念 单词
- Facade 外观模式,门面模式;通过一个类名或函数 返回对象
- Contract 契约合同: 可以理解为接口,面向接口编程
- Container 容器: 存放对象的容器.
- ServiceProvider 服务提供者: 管理(注册,调用)服务,省去了创建对象的麻烦.
- Foundation 基础组件
- Kernel 核心, 有$app的核心,http的核心,和其他核心类
- Middleware 路由中间件,一些小的解决方案,比如登录权限限制,访问频率限制
- repository (~=Model层)
$app就是一个容器,是项目最先生成的. $app->bind() 等价于 App::bind() :自己绑定声明类的依赖关系
$app->make() 生成对象,调用对象 boot extend 覆盖 修改驱动
- 提示 英文单词的 动词,名词,单数,复数 不同地方用不同的单词.例如 seed和seeder
控制反转:在一个类使用另一个类的控制权反转了,现在不用在类里面直接new类
依赖倒置:不依赖手动new了,通过注入外部的对象,一般是通过构造方法的参数传入,多用组合少用继承
laravel很好的解决了类的依赖关系
路由
路由配置在routes目录
## 生成资源控制器 ,命令里加上 --resoure 生成带crud方法的控制器
php artisan make:controller PostController --resource
#资源路由,一次性绑定资源方法 curd等
Route::resource('post', 'PostController');#模板内使用路由命名 生成url
<a href="{{ route('user.profile', ['id' => 100]) }}">
#控制器里使用 路由名字生成url
route('post.show', [$id]);
#路由分组,组内公用中间件 比如登录校: https://laravelacademy.org/post/9612.html#toc_0
#都进行登录验证的分组
Route::group(['middleware' => ['auth','verified']], function () {Route::get('/pay/ordersubmit', 'PayController@ordersubmit')->name('pay.ordersubmit');
});#兜底路由,
Route::fallback(function () {return '没设置路由,会到这里';
});
#频率限制 利用内置的throttle中间件实现
Route::middleware('throttle:60,1')->group(function () {Route::get('/user', function () {//});
});
视图
#在视图间共享变量
我们可以在某个服务提供者如 AppServiceProvider 的 boot 方法中定义共享的视图变量:
view()->share('siteName', 'Laravel学院');
view()->share('siteUrl', 'https://laravelacademy.org');
#通过数组指定多个视图组件
view()->composer(['partials.header', 'partials.footer'], function ($view) { $view->with('posts', Post::recent());
});
视图
变量自动htmlentities转义防止xss ,如果不想自动转义用{!! $variable !!},例如富文本编辑器的代码;
#注释
{{-- 注释内容 --}}
npm和前端编译
npm install 安装 前端库
package.json 可类比为前端的 composer.json,我们通过 npm install 安装该文件中定义的依赖
运行 npm run dev 编译前端资源
大多数时候我们需要在 resources/js/app.js 和 resources/sass/app.scss 中编写代码,引入其它模块,然后运行 npm run dev 就可以了
框架重点
读一遍框架自带的服务提供者源码可以帮助你熟悉各种类是怎么绑定进容器的,都绑定到哪些键上。这是学习 Laravel 框架底层究竟如何运转的最佳实践。
开发
config
根目录.env session驱动设置,如果使用php的redis扩展客户端请设置为phpredis,否则默认使用predis包.
artisan 命令行工具 好多功能
php artisan up
php artisan down
测试 分为 单元测试和功能测试
#执行测试
vendor/bin/phpunit
#运行单个测试用例
vendor/bin/phpunit --filter=UserTest
路由中间件
内置了 表单csrf,表单token auth模块中: guest中间件是游客判断(未登录用户)
auth是登录的用户判断
如果构造方法中调用中间件,可以用except() 排除哪些方法不验证.
可以自定义中间件
#该命令会在 app/Http/Middleware 目录下创建一个新的CheckAge 类
php artisan make:middleware CheckAge
常见契约 Contracts
验证email, user包含 email_verified_at 字段
常见方法
only() , except(), all(), has(), exists(),
$request->input() 智能读取变量 支持json(需要header头设置application/json)
Artisan 命令
#生成可调用的控制器
php artisan make:controller ShowProfile --invokable
#生成资源控制器 --resource参数自带curd方法的自动生成
php artisan make:controller PhotoController --resource
#创建模型 加上-m参数顺便创建迁移文件
php artisan make:model -m Models/Post
#模型工厂文件
php artisan make:factory PostFactory --model=Models/Post#Schema 建立表
php artisan session:table#执行数据迁移
php artisan migrate
#全部down,再次up,填充数据
php artisan migrate:refresh --seed
#回滚最后一批迁移
php artisan migrate:rollback
#回滚所有迁移,down方法
php artisan migrate:reset#删除所有表 重建数据库(破坏性,如果有自己手动录入的表数据请不要执行此操作)
php artisan migrate:fresh
#删除所有表 重建数据库 并填充数据
php artisan migrate:fresh --seed#生成数据迁移文件 创建新闻表
php artisan make:migration create_news_table --create news
#复杂表单验证 建立类去处理
php artisan make:request StoreBlogPost
#创建auth所需视图和控制器
php artisan make:auth
命令来生成密钥
php artisan key:generate
数据填充
#创建填充类对象
php artisan make:seeder PostsTableSeeder运行填充器
编写好填充器类之后,需要通过 dump-autoload 命令重新生成 Composer 的自动加载器:composer dump-autoload
运行之后可以使用 Artisan 命令 db:seed 来填充数据库。
默认情况下,db:seed 命令运行 DatabaseSeeder 类,
不过,你也可以使用 --class 选项来指定你想要运行的独立的填充器类:php artisan db:seed
php artisan db:seed --class=UsersTableSeeder你还可以使用 migrate:refresh 命令来填充数据库,该命令还可以回滚并重新运行所有迁移,这在需要完全重建数据库时很有用:
php artisan migrate:refresh --seed#填充中文数据
$faker = Faker\Factory::create('zh_CN');
或者修改配置config/app.php 'faker_locale' => 'zh_CN',
Factory 只是生成了测试数据,但是插入还要 用模型和DB类去写;
数据库操作
DB:: 外观类操作数据库 查询构建器
where whereIn whereBetween orderBy first
模型 Eloquent ORM
生成模型文件,带上 -m 可以创建数据迁移文件
php artisan make:model Flight -m
Eloquent ORM 每个表对应一个类
模型有些默认规则,如果与规则不符,需要重新指定 如表名,主键名,时间戳,连接的库,
注:由于 Eloquent 模型本质上就是查询构建器,你可以在 Eloquent 查询中使用查询构建器的所有方法。
新增数据
1.save
$post = new Post;
$post->title = 'test 4';
$post->save()
2.
create方法可以传数组保存数据,
但是需要设置设置$fillable属性或者$guarded属性允许批量赋值的字段
3. firstOrCreate firstOrNew
修改数据
$post = Post::find(1);
$post->title = 'test 1 title';
$post->save();
关联查询 方便快速的查询其他表
hasOne/belongsTo
hasMany/belongsTo
belongsToMany
组块结果集chunk 游标cursor 根据主键获取记录find $flight = App\Flight::find(1);//可以传数组查多条 获取单条记录first $flight = App\Flight::where('active', 1)->first(); 如果无结果跑出异常findOrFail 和 firstOrFail
fillable guarded 二选一 赋值权限设置 在数组内的字段才能赋值 setXxxxAttribate() 对字段 数据处理 Carbon 时间库使用 显示人性化语言比如:1周前 $post=Post::where('a','<','1')->latest()->paginate(10);//倒序,分页
表单验证
简单验证:
$request->validate(['title' => 'require'
]);make:reuqest 自定义验证文件删除数据: 表单提交到 资源路由的删除路由别名里 {{route('posts.destroy',$post->id)}}
可以用artisan命令查看路由列表.
调试
dd() 函数打印变量
composer dump-autoload
测试
部署后不对
# 清理
php artisan migrate
php artisan route:clear
php artisan cache:clear
php artisan config:clear
#
php artisan migrate
问题:
- 新安装的程序,执行数据迁移 就mysql报错
laravel 数据迁移文件没有指定varchar字符串长度,这是laravel官网推荐的,不必指定长度.
老版本低于5.7的mysql 必须设置最大字符长度
要配置自动指定长度 在Providers/AppServiceProvider 的boot方法内 加上下面的代码.这样你不指定长度,框架也会自动给加上默认长度191.
Schema::defaultStringLength(191);
//Schema是数据迁移用的类
- 安装扩展 数据库报错 清除配置缓存试试
php artisan config:clear
- 提示找不到类:
被提示的类中有语法错误,就会提示找不到
laravel获取不到session
- dd(), die() 等终止函数导致不会写入session;
- 普通web网页要启用 web中间件才行 开启seesion;
- session自动开启服务配置
- 在登录操作的 后面执行了dump也会导致不能保存seesion登录状态;
cookie 为空,不生成
路由没有在web中间件下
登录一次session id变化一次
框架的机制 为了安全
常见namespace
use Illuminate\Support\Facades\Auth;//Auth外观
低级错误
用户名写错了 报错root@localhost
getConnectionName() 自己写的模型类 没继承Model
缓存使用
$value = Cache::remember('users', $seconds, function () {return DB::table('users')->get();
});
模板
{{ route('register') }}{{ url('/home') }}@if (session('status'))
@endif<html lang="{{ str_replace('_', '-', app()->getLocale()) }}"><meta name="csrf-token" content="{{ csrf_token() }}"><script src="{{ asset('js/app.js') }}" defer></script>
@csrf
@guest @else @endguest
@if (Route::has('register')) @endif
@yield('content')
语言包{{ __('Logout') }}
laravel设置 cookie
Cookie::queue('a', 'aaaa', 1440);
//这样就行了;
//注意cookie是默认加密存储,你看到的值是加密后的;
转载于:https://my.oschina.net/yiupng/blog/3022765
laravel 入门指南相关推荐
- php laravel 教程,Laravel 入门到精通教程
Laravel 入门到精通教程 由 学院君 创建于1年前, 最后更新于 1个月前 版本号 #56 1986689 views 1127 likes 120 collects 适用于 Laravel 5 ...
- 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题
入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...
- Maven入门指南⑦:Maven的生命周期和插件
Maven入门指南⑦:Maven的生命周期和插件 一个完整的项目构建过程通常包括清理.编译.测试.打包.集成测试.验证.部署等步骤,Maven从中抽取了一套完善的.易扩展的生命周期.Maven的生命周 ...
- UE4风格化场景设计入门指南 Stylized Station – The Environment Artist’s Survival Kit
持续时间13h 1920X1080 .ts 包含项目文件 大小解压后:4.9G 语言:英语+中文字幕(人工校对) 标题:风格化的车站--环境艺术家的生存工具包 信息: 环境艺术很难. 尤其是作为初学者 ...
- 游戏风格化角色创建入门指南视频教程
游戏风格化角色创建入门指南视频教程 时间 33小时 包括项目文件 1920X1080 MP4 语言:英语+中文字幕(根据原英文字幕机译更准确)+原英文字幕 游戏中的风格化角色创建入门指南 百度一下 ...
- mongoDB 入门指南、示例
http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html mongoDB 入门指南.示例 上一篇:简单介绍mongoDB 一.准备工作 ...
- 智能合约和区块链技术:入门指南
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 智能合约和区块链技术:入门指南 多年前,在没有数字合约和区块链技术存在的情况下,双方的合约往往以传统的方式进行.在加密货 ...
- 数据分析从头学_数据新闻学入门指南:让我们从头开始构建故事
数据分析从头学 by Mina Demian 由Mina Demian 数据新闻学入门指南:让我们从头开始构建故事 (A Beginner's Guide to Data Journalism: Le ...
- 《Redis入门指南(第2版)》一第2章 准备
本节书摘来异步社区<Redis入门指南(第2版)>一书中的第2章,作者: 李子骅 责编: 杨海玲,更多章节内容可以访问云栖社区"异步社区"公众号查看. 第2章 准备 R ...
- jQuery中文入门指南,翻译加实例,jQuery的起点教程
中文版译者:Keel 此文以实例为基础一步步说明了jQuery的工作方式.现以中文翻译(添加我的补充说明)如下.如有相关意见或建议请 EMAIL 告知.或者在 BLOG中留言. 英文原版:http:/ ...
最新文章
- 推荐一些算法方面的好书
- 数组做参数_ES6 系列:你不知道的 Rest 参数与 Spread 语法细节
- 深度 | 智慧•城市,基于国际视野下的思考
- 地图查询定位功能(Flex API)
- Ubuntu一键安装LAMP环境
- jQuery:仿MSN网站的tab效果
- Notadd 2.0 全新 Node.js 版本~ (开发中) [从 PHP 到 node 的踩坑记]
- zepto源码--filtered, contains,funcArg,setAttribute,className,deserializeVale--学习笔记
- 搞懂Nfc刷卡看这篇就够了
- mybatis generator 使用文档
- 怎样将PDF作为矢量图插入PPT中
- 软考高项 : (04)论项目沟通管理
- SEO优化之alt属性和title属性
- linux centos fedora 安装LBP2900打印机 LBP6230dn LBP6240dn
- h5 富文本输入框_H5富文本编辑器的详细介绍
- ubuntu 16.04 下安装搜狗输入法教程
- keil5实现LED灯闪烁,简单延时函数不生效解决办法
- HTML零基础入门学习大全-干货!
- B 树、B+ 树特点及使用场景
- 创客学院知识巩固-04网络
热门文章
- 信捷PLC远程上下载程序,远程控制
- 游戏《部落冲突》中的心理学运用
- [Excel函数] 逻辑判断函数
- 回溯算法符号三角形java_算法设计与分析——符号三角形问题(回溯法)
- 计算机断网后显示配置0%,电脑断网后自动报警提醒怎么设置
- Highlight Plus - Unity3D物体高亮插件使用教学
- 计算机网络技术——VLAN划分
- java毕业设计投标文件在线制作系统mybatis+源码+调试部署+系统+数据库+lw
- 计算机国际标准编码,【计算机基础】常用编码格式
- MySQL创建网吧管理系统_java网吧信息管理系统