laravel基础再牛,也是PHP写一堆代码_第1页
laravel基础再牛,也是PHP写一堆代码_第2页
laravel基础再牛,也是PHP写一堆代码_第3页
laravel基础再牛,也是PHP写一堆代码_第4页
laravel基础再牛,也是PHP写一堆代码_第5页
已阅读5页,还剩41页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

laravel--艺术1何安装 结arave再牛,也是PHP写的一堆代码. oo/co/ppu.m/server.p/vearave自身有很多 文件同时有个 poser.jso文件.四种我们该如何安装 ,网上你大概能找到4种方法,但你不要去死记完整的laravel=完整的laravel=laravel本 composer指定的依赖所以你至少可以有这4种办法1.用composercreateproject命令自动arave,同时自动安装依赖composercomposercreateproject别人帮我拼装好的laravel本身opo中指定的在这:/down手动arav本身 /arave/arave/tree/5.1poseri 下poserilarvel安装器,可以帮你完成这两步(不推荐##安装“laravel安装器”(不是laraval)composerglobalrequire"laravel/installer"cd/rlc/nginx/htmposer/vendor/bin/laravelnew<you修改 权在nux下使用arave,需要修 的权ododorwx<project>/storageodorwx<project>/bootstrap/cache配置在ngnx中,配置server段,指向 依我们要做的p2p金融为例locatiolocatio/ l<e>/ulcidexidex.ppidex.tmidex.}在apache中a RootDwww<retpb"V配置简洁对对于apache,需要开启rwrt写模块,ttp.cof中,把下一行前去掉oaorrtolmodlsmowres在<project>/public创建 taccess文件,内容如下onFolomLikerteEginOnerteon%{REQUESTIAEderteon%{REQUESTAEferteRl^index.php[L]如果仍不可以,找如下代码,把Noe改为##owOvrcotrolswatdirectivesmaybeplacedi.taccessfiles.#Itcabe"All","Noe",orayombatioofte AlovrrileIfoAutCofigLmllowveNo对于ngnx,在虚拟主机配置段中加locationlocation/tryfiles$uri$uri//index.php?$query}ngnx实例locatiolocatio/ ljrotryfiles$uri$uri//idex.pp?$querystrig;idexidex.ppidex.tmidex.tm;}可能**1Whoops,ookskesomethngwentcp.evxaml.ecp.evxaml.e2.NosupportedencrypterRuRutiExetiEcryptioServicerovider.pplieNosupportedecrypterfou eciperad/orkeylegtarei原因:arave需要定义一个key,用于作密钥用,但没生成这个key.解决:ppartsiakey:geerate生成key服务器这种情况下首先确保环境是正确,虚拟主机置也正然后问题应该出现在 的权限上.请按.章节继续操作.2由路由roject>/app/Http/routes.parave的路由器与控制器的关系,roject>/app/Http/routes.p/下例指:当用GET方//yy这个/下例指:当用GET方//yy这个地址时,用xoror中的reg()方法去响应Route::get(/yy,xotrorr/当用POST//zz这个地址时,用xoro中的pay()方法去响应Route::post(/zz,Xxotrorpa/当/ "/"时,用第2个参数 函数去响应Route::get(/,function{ o/xmtRot::mtc(get,post],/user, xotrorto)///foo/bar,都用第2个参数中 函数去响应Route::any(/foo/bar,function{ oor路由下下例是/user/123这样的URL,user后面的值将会捕捉到并自动传递给控制器的方法 函Route::get(user/{id},fuctio{returUser下例是指 /cat/{cat}/page/{page}这样的URL,cat后的参数和page后的参数,会 捉到,并自动传递给控制器的方法或 函数Route::get(cat/{cat}/page/{page},fuctio($catid,$pageid)传递Route::get(Route::get(user/{ae?,fuctio($ame={retur$Route::get(Route::get(user/{ae?,fuctio($ame= {retur$参数在TP中,自动验证写在Mode里,不够灵活.arave把参数限制写在方法里Route::get(Route::get(user/{am,fuctio($am})>were(ame,[AZaz]Route::get(user/{id},fuctio($id)})>were(id,[09]Route::get(user/{id}/{am,fuctio($id,$am})>were([id=>[09] ame=>[az]注意:路由参数不能包含中横线,(想想变量名规范)".3制控制器放在哪儿<project>/app/Http/Co控制器放<project>/app/Http/Co控制器文件叫什么文件名文件名:Xx控制器Cotroller.p例:UserCotroller.p注意:单词首字母大写[大驼峰规则控制器类叫什么?命名空间叫什么?继承自谁类叫XxCo类叫XxCo命名空间是App\Http\Co继承自App\Http\Cotller\CnamespacepptptrruseporrorrclassXxxControllerextends{publicfunctionadd()}}4章模板操模板放在哪儿模板放在<roe>/rorcsvew下叫什么xx.pp,或xx.blade.p如果以.pp结尾,模板中直接写PHP语法即可,例<?ppeco$title如果以.blade.pp结尾,则是用arave特有的模板语法.例{{title}}注意如果有xx.pp,xx.blade.pp两个同名模板优先用bade模板和控制器有什么对应关系直接在控制器方法里即可.XxControllerXxControllerpublicfunctionreturniezz);//将使用izzdp}publicfunctionreturnieuser.add);//将使用rad}}5章数据库迁创建createcreatedatabaseliocarset修改编辑项目下的.env文件,使之适合自己的服务DBHOS=localDBHOS=localostDBDAAASElDBUSERNAME=rootDBASSWORD=数据依我们目前的知识,需要建表createtable需要改表altertable但是,arave中,不建议用命令手工建表和修改表,而是把对表的操作写成mgraton迁移文件.然后avave通过迁移文件来操作表所以,数据迁移文件就是操作表的语句文为什么用迁移文件,而不直接敲sq操作表便于团队统一操作表比如你在自己电脑上createtablexxx(),建了一张表但其他几个程序员,如何和你保持同步?也打开mysq控制台执行一遍?其实就是:对表的操作,都体现在文件上,而不是随手敲个命令改表出了问题,容易追查责任和回溯上次我们 平台,从2/29号新关注的用户信息不能入库我翻历史命令时,发现有人执行altertable语句,而且该语句把表的autoicremet属性去掉了,导致了主键复,无法入库而此人,正是助教而且他错误后,把表结构又改了回去,装做没事儿人.如果有表迁移文件,责任就好找多了而且,即使出错,只需要用mrt 工具回退表结构即可pp mmgrtaddpriceto 迁移文件用命令行生成,自己再补齐内容两例:ppp mmgrtaddpriceto 看到如下两个文件classclassGoodsextendsMgr{{publicfunction{hem:retegoods,function(Blueprint$table)$tablenrtsid$tablemtm}publicfunction{m::ropgoods}}classclassgoodsextedsMgrtpublicfuctio{Scea::legoods,fuctio(Blueprit$table)}publicfuctiodow{Scea::legoods,fuctio(Blueprit$table)}}我们只需要在 on中补齐对表的操作即可,比如字段,字段类型等迁移文件是一个类文此类中,有2个基本方法,up和dowup()负责建表,加列,dow()负责删表,减列,迁移文件分创建表和修改表两种在上一节中,仔细观察2个类的方法create=xx表,则该类的up()中调用Scea::rte()即创建表.table=xx表,则该类的up()中调用Scem::abe()即修改表.creategoods迁移文件的名字以能说明文件的作用最好creategoods数据当迁移文件做好的之后,以下几个命令,执行迁移文件phpartsanmphpartsanmgrate:robackphpartsanmgrate:resetphpartsanmgrate:refreshphpartsanmgrate:statusphpartsanmgrate:nstamigrate:执行所有迁migrate--force:强制执行的迁移文migrate:rollback**回退到执行迁移前的**migrate:reset回退到所有迁移之前的

创建商品表addagetostutable,为学员表添加age字migrate:refresh回退到初始状态,再次执行迁移/docs/5.1/mgrat常见列类型一览$table>bgcremets(idIncrementngID(prmarykey)usnga"UNSIGNEDBIGINTEGER"equva$table>bgteger(votesBIGINTequvaentforthe$table>biary(dataBLOBequvaentforthe$table>boolea(coreBOOLEANequvaentforthe$table>car(ame,CHARequvaentwtha$table>date(createdatDATEequvaentforthe$table>datemcreatedatDATETIMEequvaentforthe$table>ecalamout,5,DECIMALequvaentwthaprecsonandsca$table>double(lu,15,DOUBLEequvaentwthprecson,15dgtsntotaand8afterthedecmapo$table>eumcoices,[foo,barENUMequvaentforthe$table>float(amoutFLOATequvaentforthe$table>icremets(idIncrementngID(prmarykey)usnga"UNSIGNEDINTEGER"equva$table>iteger(votesINTEGERequvaentforthe$table>jso(optiosJSONequvaentforthe$table>jsob(optiosJSONBequvaentforthe$table>logext(descriptioLONGTEXTequvaentforthe$table>eduteger(umbersMEDIUMINTequvaentforthe$tableeduext(descriptioMEDIUMTEXTequvaentforthe$table>morps(taggableAddsINTEGERtaggableidandSTRINGtaggable$table>ullablesSameasps)exceptaows$table>rememberokeAddsremembertokeasVARCHAR(100)$tablesmllteger(votesSMALLINTequvaentforthe$tableoDltsAddsdeletedatcoumnforsoftde$table>strig(VARCHARequvaentco$table>strig(ame,VARCHARequvaentwtha$table>text(descriptioTEXTequvaentforthe$tabletesuriseTIMEequvaentforthe$table>tiyIteger(umbersTINYINTequvaentforthe$table>tmsaaddedo$tabletsaAddscreatedatandupdatedatcoUUIDequUUIDequvaentforthe$table>uuid(id常用$table>uuid(idScScea::beusers,fuctio($table)$table>stri )>Pacethecoumn"frst"nthetabe(MySQLOn>after(luPacethecoumn"after"anothercoumn(MySQLOn>AowNULLvauestobensertedntothecoSpecfya"defaut"vauefortheco>usigSetitegercoumnstoE按MVC的架构,数据库的操作大部分应放在Mode中但如果不用Mode,我们也可以用arave的DB类操作数据库而且,如果某些极其复杂的sq,用Mode已经很难表达,要手写sq也需要用DB类去执行原生sq:ale:aleusers增DB::table(users)>i 单行DB::table(users)>i isert()方法返回值为true多行(数组

获取操作users表的实例DB::table(DB::table(users)>i[[=>后返回主键值获取主键值,用isrGed()方DDBtalusers)>iG( 改典型修改Btalusers)>were(id,1)>update([age=>19])相当于squpdateuserssetage=19wereid=1某字段增长或减少DDBtalusers)>were(id,1)>icremet(age);DBtalusers)>were(id,2)>icremet(age,3);DBtalusers)>were(id,3)>decremet(age);DBtalusers)>were(id,4)>decremet(age,3);删Btausers)>were(id,>,6)查////select*fromusers;DBtalusers)>get();////select*ouserwereid>Btausers)>were(id,>6)//selectouserswereid>Btausers)>select(id )>were(id,>6)//select*ouserswereid=6取出单行,DBtalusers)>were(id,6)注意:,.7章完整的增删改程序GET/msg/ndex展示留言列GETmsg/add展示表GET/msg/de/{d}删除留言[GET,POST]/msg/up/{d}修改留言按规划写如下路由Route::get(Route::get(g/dex,MsgCorler@dex);Route::get(msg/add,MsgCorollra);Route::post(msg/add,MsgCotrllraost);Route::get(sg/e/{i MsgCotrllr@ou:ma([get,post],g/up{d,MsgCorollru数据pp mpp mkmrt createmsgs =编辑迁移文publicpublicfunctionup()em:rtmsgs,function(Blueprint$table)$table>retsid$table>string(title$table>string(content$table>integer(pbt$tablemm}publicfunction{m::ropmsgs}1.执行迁移ppartisat发布表单namespacenamespacepptptrruseApptpCrlrsCnrlruseDB;classsgCnrorextends{publicfunctionadd(){returniwmg.d);}}////mlt>rrgadm<metacharset="utf<h1>laravel添加留言<raction=""tdpot<p><inputtype="text"m=<textareattxtr<p><inputp=sbitvalue="提交r/t发布页publicpublicfuctiopost()$rs=D:talemsgs)>isert([title=>$OS[title],cotet=>$OS[cotet]]);retur$rs?OK:fail}提交出错<iputtype="idde"amtoke"value="<?ppecocsrftoke<iputtype="idde"amtoke"value="<?ppecocsrftoke();okematExceptioiVeryCroke.pplie列表页publicpublicfuctioidex()$msgs=Btalmsgs)returvwmg.dex,[msgs=$}<<1>所有留言</<td>标题<td>内容<td>操作<?ppforeac$sgas${<td><?ppeco$m>title;?><td><?ppeco$m>cote<td><ar/sg/lpeco$mid;?>">删除<a="/sgu/<?peco$mid;?>">修改<?pp}</删除页+跳转功publicpublicfuctiodel($id)if(D:talmsgs)>were(id,$id)>delete(){returredirect(sg/dex}else delerror}}修改m<metacharset="utf<h1>laravel修改留言<raction=""tdpot<p><inputtype="text"am=itevalue="<?phpecho$msg<textareanam=cotentpecho$msg<inputtype="hidden"aetoken"value="<?phpechocsrftoken();<p><inputp=sbitvalue="提交r/tpublicpublicfunction{if(empty($POST))$msg=DBtblmsgs)>where(id,$id)>first();;returnvwm.,[msg>mg)}else$rsB:abmsgs)>where(id,$id)>update([title=>$POST[title],content=>$POST[contentreturn$rs?OK:false}至此,我们已经用arave做了一从增删改查的角度讲,此时你可以用arave 做任意了.但是,arave还有很多漂亮的功能没有用上接下来,继续深入学习8章blade模arave有自己的模板引擎,以.blade.pp结尾.数据在Smarty和TP模板中,要把变量assig给模板引擎.smat>assig(title=>今天天气不错smat>assig(cotet=>温度零上13度在bade模板中,不是assig,而是以数组参数集中传递例$data$data=title=>天气预报,content今天天气真不错,score=>mtrand(40,90),users=>[zhangsan,lisi,wangwureturnvwtestewxx,普通->天气预@@(express)#注意express@ele(express)#l@edif例@($score>=@ls($score>=l@eunless(除非,和if相反@u@uless($score>=@edufor循@for@for($i=0;$i<10;$i$i<br>@edforforeach循@foreac@foreac($usersas{{$u}}<br>@edforeacforelse循环是否为@@os([]as@e@clude(@clude(sub模板

包含s下的sub.blade.p头部和尾部都一样,就中间的左右内容不一样用iclude模板来做,是把头尾拿出来eader,footer拿出来然后@clude(eader),clude(footer)需要@clude两次,而继承则是把eader/footer公共框架写在父模板中,继承一次父模板模板继承的概念和面向对象的继承非常相似,看下例 父模板paret.blase.p <<metacarset="utf<divstyle="backgroud:gray;">@sct(leftside)tisisparetleft@sow<divstyle="backgroud:gree;">@sct(rigtside)tisisparetrigt@sow</父模板中有2个方法leftside,rig子模板继承父模板,并且写leftside,rigtside方法,则可 子模板soblade.pp>@exteds(paret)@sec(leftside)soleft@e@sec(rigtside)sorigt@paret@e,同时,子类rigtside方法中的父类方法.因此,显示结果为 父模板paret.blase.p <<metacarset="utf<divstyle="backgroud:gray;">soleft<divstyle="backgroud:gree;">sorigtparetrig</ 为防止blade模板去解析,前面加@符号解析.例r模板输出已自动防[[code=><script>alert(1)</script>输出到vew;/s如果确实不需要实体转义,可以加!!.(1个大括号,不是两个例例9章强大的 Model放在哪儿?命名空间是什么mode文件默认放在 下,命名空间是 ,但请注意命名空间 路径保持一致Model类叫什么?继承自谁在arave中约定(非强制),表名叫xxs,复数形式.如用户(user)表叫users,邮件(ema)表叫类和表名有关系,一般表名去掉s,即为Mode的类名所以users表的Mode类叫classs表的Mode类叫 ,注意首字母大写继承自luate\Database\Eloque\o以msgs表对应的Msg.pp文件为例,典型的Mode如下namespacenamespaceusettclassMsgextendsd{}自动生成Mode可以手写,可以也用artsan命令行工具生成例:ppartisakod ppartisaed gm生成Mode同时执行m实例化$$odnewApp\Xxx得到Xx表的Md且不与表中任何行对应$mde=Xxx::find($id);//得到Xx表的Mod且与$id行数据对应增publicpublicfunctionadd()$msg=new$msg>title=$POST[title$msg>content=$POST[title];return$msg>save()?OK:fail;}查查单行fnd()与f////按idgid($id//按id//按where条件Msg::where(id,>,3)查多行a()和////无条件查所有行.select列1,列2rgMg::a列1,列2]);////按条件查多Msg::were(id,>2)>get([列1,列2改publicpublicfunction{if(empty($POST))$msg=f$returnviwsg,[msg>}else$msg=f$$msg>title=$POST[title$msg>content=$POST[content];return$msg>save()?OK:fail}}删publicpublicfunctiondel($id)$msg=f$return$msg>delete()?ok:fail}复杂排序//select...whereid>2orderbyiddesc;//select...whereid>2orderbyiddesc;Msg::where(id,>,2)>orderBy(id,desc)>get()**限制条目////select..whereid>2orderbyiddesclimMsg::where(id,>,2)>orderBy(id,desc)>skip(2)>take(1)统Msg::avg(idMgmnidg:maxidM:umid分组(错Goods::groupBy(Goods::groupBy(catid)>get([catid,avg(price)])//想要效果:selectcatid,avg(price)rogoodsgroupbycat//实际效果:select`catid`,`avg(price)`rogoodsgroupbycat//原因:laravel在字段名两边用反引号包住了分组(对////用DB::raw()方法,raw是",不修饰的"意Goods::groupBy(catid)>get([catid,DB::raw(avg(price))])更复杂的查询表达式/docs/5.1/quermodel的约表名的约定默认表名为ol名+s,可能通过的mode类的table属性来指定表名.列classclassXMdeextendsoeprotectedprotected$table=rbeNa}d的约定Mode默认认为,每张表都有一个叫做id的主键,你可以通过rrKey属性来指定主键列名classclassXxdextendsde{protectedpriryKe=Xxid} at字段Mode默认有这2个字段,且在更新行时,会自动帮你更新这两个字段.如果不想这样,甚至不想要这2个字段,mode的sms属性设为classclassxMdextedso{public$tta=}10章Request对Request对上放置着此次请求的全部信息.如请求方式请求路径(后的部分)请求cooke等诸多信息,都存到的Request对象10.1Request对另:如果方法中有路由器绑定的参数,不受影响:RouteRoute::get(/del/{$id}publicfunctiondel(Request$request,$id)//$id参数虽然到第2个参数去了,但不会受影响}利用Request对象修改留言例,用Request对象改进留言修改功能useusetRqupublicfunctionup(Request$request,{if(ept(POST))$msg=f$returnviwsg,[msg>}elseprintr($request>all()$msg=f$$msg>title=$request>input(title);//ipPOS参数 属$msg>uti=$request>input(uti,im());给个默return$msg>save()?OK:fail}}利用Request对象上传////mlt>rrgadm<metacharset="utf<h1>laravel添加留言<<raction="<?phpechourl(msg/add);?>"tdo<p><inputtype="text"m=<textareattxtr<p><inputtype="file"aep<p><inputp=sbitvalue="提交r/t发布页publicpublicfuctiopost(Request$request)$request>file(pic)>move(/pat/o/gexxj}laravel与TP对是URL与控制器的路由器的区 arave的路由简单,灵活,指向控制器的方法.而TP的路由是由模块/控制器/方法这种规律生成.准确的说,TP不能是URL与控制器的而TP的"规则路由","正则路由",只是URL的一个别名甚至是跳转,不是真正的路由而且路由只能在模块下发挥作用,容易出错URLURLROUTERON=>true,URLROUTERULESgoods/:goodsid=>Index/goods)假如上例写在Home模块下,是指ooe/dex/goods/goods整体设计的区别arave接管了的全过程,数据库+MVC+错误处理而tp,不包含数据库Balcols不在tp管理范围tikppMVC,$arave更像一个全自动车床,输入原料,得到成品.,$,$设计思想的区别arave大处省流程",tp"小处省字母例而tp则$,$有本质变化TP下,和纯手写博客时的思路,没有根本变化,仍是接$GE,$OS,$而arave,则是接收参数的方式都已经截然不同 >XxCotroller>metTP提供的D(),M()I(),等有改变你的工作方式,只是让略省几个字母.arave则从流程和方式上,改变和简化工作.

,仍是$

仍需要手动接收,I(get.id相比$GE面向对象的区别通过文件上传体现的比较明显,arave是把"WEB功能封装在对象里",TP则是"封装对象帮你做web功能模板的区别arave的模板语法比TP语法简arave提供了系列好用的函数,大致分为以下几类./docs/5.1/hepers各举几例array把数组拆散组成一维数组array$array$array=arraycollapse([[1,2,3],[4,5,6],[7,8,//[1,2,3,4,5,6,7,8,strlt取字符前几位strlt$value$value=strt eHframeworkforwebartisas., eHstr_random()$stri$strig=strraom(//8位随机字符实体转ececoe(<tl>oo<tl//<tltoo&ttlt$pat=apppatapppat$pat=apppatapppat也可以用于获取也可以用于获取 下的其他文件的路径$pat=apppat(Http/Corlls/Ctroller.ppbasepat()返回项目的绝$pat=basepat$pat=basepat(vedor/bi也可以$pat=basepat(vedor/bi$pat=cofigpatcofig$pat=cofigpatcofigpat$pat=publicpatpublicpat()返回项目的公共文件所 (js,css等$pat=publicpat生成规范url(url(foo/bar);url(/,[cat,3,page,4]); actio配合路由器,生成规范actio////如果路由器没定义到XxColler@meod的路径,则会报错actio(XxCotlr@mod);ecoactio(MsgCorllr@e,[3,page退回上returretur加密$password$password=bcrypt(mysecretpasswordcoco$value$value=cofig(ap.tze$value=cofig(ap.tze,$default)没读到配置,则返回csrftoke生成防跨域提交csrftoke$toke$toke=csrftokecsrf生成防跨域提交的隐csrf{!!{!!csrffield()打印变量并终止执行,一般调试时定returreturredirect(/ome得到当前的request对$request$request=$value=request(key,$default=章 项目开p2pe租宝,人人贷商业模式在豪华地段,租最豪华,招模特做前台,一水的170,大长腿资本,,再到敬老院雇一病老头做(关键.市场宣诺高额回报,利率15%起,我说的是月利息没客户怎么办?在央视黄金时段砸.线下销售,销售,狂拉付不出利息怎么办?没事,用下一个客户的本钱付上个客户的利息当客户本金积累到亿,时的死.我们的钱哪去了鬼知道!基本功能:用户表:字类说uprmary主str用户str电子邮mobstr号strregt时astog上次登陆时记录用户cook招标表字类说pprmary主u用户uttnystr金mobstrttstr项目名tny利率(千分比tny还款期限,月为单tny0审核中,1招标中,2还款中,3结rev已招标pubt项投标表字类说bprmary主u用户up项目pttstr项目名投标金pubt投标时招标信息附属表字类说aprmary主u用户up项目pttstr项目名reastr真enum('男','女satny千为单jobcstr工作城str用户描收益表:grows待完善还款表:hks待完善流水表:logs待完善////userspublicfunction{em:rtusers,function(Blueprint$table)$table>rtsuid$table>string(name$table )$table>string(ol$table>string(password,$tablerebr$table>integer(rgtim});$table>integer(lastlogin}projectspublicfunction{em:rtprojects,function(Blueprint$table)$tablenrtspid$table>integer(uid$table>string(name$table>tinyinteger(age$table>integer(money$table>string(ol$table>string(title$table>tinyint(rate$table>tinyinteger(hrange$table>tinyinteger(status);#0审核中,1招标中,2还款中,3结$table>integer(recive$table>integer(pbt}//bidspublicfunction{em:rtbids,function(Blueprint$table)$tablenrtsbid$table>integer(uid$table>integer(pid$table>string(title$table>integer(money$table>integer(pbt}//attspublicfunction{em:rtatts,function(Blueprint$table)$table>retsaid$table>integer(uid$table>integer(pid$table>string(rana$table>enum(gender,[男,女$table>tinyinteger(salary$table>string(jobcity$table>string(udesc}13认证 自带了用户认证 类,可以方便的帮我们完成认证 主要用到App\Http\Cotrollers\Aut\AutCotroller以及users准备工作arave已为我们准备好用户登陆/的路由////AthentitioRoute::get(auth/login,At\Athtrrt);Route::post(auth/login,AtAthotror@otog);RouteRoute::get(auth/logout,tAtCorolr@gLogo//RgiroRoute::get(auth/register,At\AtorlrgtRgt);Route::post(auth/register,AtAtorlr@tRgit);arave要求users表至少有如下字段name字ema字password60个长度remember_token100个长度如果以上2步准备好,一个用 登陆程序就完成了因为arave的AutCotroller类已经开始准备好的相关方法为容易理解,我把AuthControer(我把属性方法归纳在一起,让你容易理解.真实源码比这复杂classAuthControllerprotectedrgtrVie=auth.register;#默认 protectedlgiVie=auth.login;#默认登陆表单protected$redirectPath=/home;#登陆成功后的跳转方向protectedreretAtrogo=/;#默认退出后跳转页protected$loginPath=auth/login;#默认登陆URLprotected$username=name;#与password字段配合登陆的字段m mbile都可publicfunctionggr{return$thishwRgrtoFrm}publicfunctionpostRegister(Request{return$this}publicfunctionrgtr(Requs{$validator=$this>validator($request>all());if($validator>fails()){$thistroadoExpo$request,}At:gurh>getGuard())>login($this>create($request>all()));returnredirect($this>redirectPath());}publicfunction{if(propertyexists($this,redirectPath{return$this}returnpropertyexists($this,rdrct)?$thisrdret:/home}publicfunction{return$thisoogr}publicfunctionpotLog(q{return$this}publicfunction{returnreturn$this}publicfunction{At:gurh>getGuard())returnredirect(propertyexists($this,redirectAfterLogout)?$this>redirectAfterLogout:/}}用户frmethPOS"action="{{url(auth/register csrf 用户名:<inputtype="text"nme"aevalue="{{old(name:<input "n "value="{{ ):<inputtype="text""o:<inputp=pasrd=pr确 :<inputtp=pswrnamepwrrn 注意,确 必须叫passwordonrmio才能自动验证<buttontp= r登frmethdPOS"action="{{url(auth/login csrf 用户名:<inputtype="text"a"value="{{):<inputp=pasrd=pr<inputtype="checkbox"a=remr"<buttontpe=su登陆r如果有自己独特的独特登陆逻辑,可以手动登陆验证)tt=> ,password=>pswr]Ah:tmt(name=>nampassword=>$password,active=>Aut::cAut::cAAtlgot14章发布借款申 RouteRoute::get(jie,Protror@i);Route::post(jie,rootroro);生成申请牵涉到2张表,projects,我们为期生成ModephpphpartisanmedeProphpartisanmedeclassProextendsel{protected$table=projects;protectedprimryK=pid;publictimap=false;protected$fillable=[money,age,ml}classAttextendsel{protectedpriryKe=aid;publictimap=false;}publicpublicfunctionie(Rque{returnvwyeku}publicfunctionjiP(Rq$request)//$rs=Pro::create($request$pro=new$pro>age=$request$pro>money=$requesto$promole$request$prouti=($rs=$pro//开始写入atts附属表信$att=new$att>uid=$user$att>pid=$pro$attvarr}在上一节中,发布的roject信息没有用户的uid,ame信息我们需要从登陆信息中拿到这两条信息,并写入roject中.arave中,获取当前登陆用户的对象,可以用如下方法:$user$user=$user=$request通过ur实例,可以拿到当前登陆用户的信息,publicpublicfunctionjiP(Rq$request)//$user=$user=$request$pro>uid=$user$pro>name=$user} 项目审路由器RouteRoute::get(prolist,ekotrorro控制器//file//file/app/p/ror/ekror.hpublicfunctionprolist(){$pros=Pro::orderBy(pid,desc)>get();returnvwprolist,[pros=>$pros]);}v16章投资功16.1投publicpublicfunctiontouziPost(Request$request,$pid)$pro=$bid=new$user=$bid>uid=$user$bid>pid=$pro$bid>title=$pro$bid>money=$request>input(vamount$bid>tim=($bid>save();//写入投资信//修改项目收到的金$pronretrecive,$bido//如果投标已满,则改此项目的状态.if($pro>money==$pro>recive//$pro>status=//$pro$this$thistoiDo($pr//}echosucc}投标完成后,借款人每月要还"本息",投资人每天要收利息因此,.还款表字类说hprmary主u用户up项目pttstr项目名每月还款金账单tny是否已付利息任务表字类说tprmary主u用户up项目pttstr项目名每月还款金收利息截止//还//还款账单表移文publicfunction{em:rthks,function(Blueprint$table)$table>rtshid$table>integer(uid$table>integer(pid$table>string(title$table>integer(amount$table>date(paydate}//tasks表迁publicfunct

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论