前言

  由于这学期有个数据库的课程,虽然我把数据库的设计都交给了和我一起组队的学委了,但是无论如何,下学期还是需要将这个教学系统做成动态网页。
  因此我就网上找教程,发现了一个 PHP Laravel 框架的教程完全符合我们要做的效果,因此了就开始我的PHP试水之旅。
  当然学之前还是给自己准备好了教程
2018千峰php教程
高手养成计划之laravel框架

PHP 基础

  我是先过了千峰php的基础,教程分了好几个部分,我就选择了基础的部分去看。

初学

  这些部分是我看过的,我看的非常得快,基本是加到 3 - 4 倍速度,因为都是些很基础的东西。
  编程是共通的,细节部分可以后面慢慢研究。
  后面还有一些 PHP 的进阶用法,比如利用PHP修改本地文件,制作图片验证码。
  大概过了一下思路,没有自己动手测试,想着这些功能都有现成框架,所以就没有深入学习。
  其实我知道这样会非常不好的,终究变成最后还是逃不过底层的。不过这次只是试水应付作业,就不管这么多了。

框架选择

  其实在学习PHP之前,我还在犹豫到底要用什么语言做这个动态网页的作业,之前我们的动态网页课程是学习了原生 java web 的技术
  而且后端还有 go 语言、python、node 等成熟的体系。
  而且PHP是最好的语言都成了编程的梗了,也看过一些文章吐槽PHP内置函数屎一样的命名规则。
  不过想到PHP的易用性还是先从它试试水吧,毕竟世界上有30%的网页是用 wordpress 做的,而wordpress框架是PHP做的。
  屎一样的命名规则也是有起历史原因的,以前松散的命名便于学习,后面PHP其实也做了一些规范的努力。但是为了做到向前兼容也无可奈何地保留了一些命名。
  既然选择了PHP就要选择PHP框架了,应付作业就不可能从零做所有的事情。
  发现PHP有好多框架,国内最火的框架是国人开发的 ThinkPHP ,而国外最热门的是 Laravel。
  最后我还是崇洋媚外地选择了 Laravel,背靠Stack Overflow可以解决问题。(真· 面向 Stack Overflow编程)
  然后顺便再B站搜索 Laravel 框架实现的东西。
  没想到当中就有我所想要的东西, laravel在线教育项目,真的是直切要害的教程。

学习Laravel

  B站的教程没有教程相关的资料,于是我在CSDN找到了很棒的百度云链接 链接
  不仅有源码还有教程笔记。
  教程总共分为10天,其中有一天的视频缺失了。
  前4天讲解 Laravel 框架基础,后6天搭建在线教育系统。
  我看了前两天的讲解之后就坐不住了,因为想要赶在汇报之前将demo坐出来,否则暑假可能没有压力去学习 Laravel 了
  前两天的讲解也确实学到了不少东西,包括 Laravel 的路由机制、数据库处理方式,后面还有些关于文件存储的,但是后面飘了,没有看进去。
  于是我就匆匆开始从第4天的在线教育平台搭建开始看起。
  配置服务器环境,配置Laravel环境,搭建后台路由,一切都顺理成章。

Laravel 在线教育平台

坑爹的Composer

  PHP也有了类似于前端的 NPM 包管理器,叫做Composer。
  教程也提到使用国内服务器的景象可以极大提高访问速度。
  然后我配置还是很慢,配置一次 Laravel 的环境花了1个小时,慢到流泪的下载速度啊~~
  总而言之折腾了很久,但是最后还算是有惊无险地将环境配置好了。

H-ui.admin 搭建后台路由

  万万没想到这个 ui 框架,也是我之前工作室师兄使用后台前端页面啊
  这个东西是开源免费的,我当时还以为是他自己搭建的。
  不过难受的事情才刚刚开始。

搭建数据库

  首先不得不吐槽一下 Laravel 对接数据库的封装方法,虽然将 sql 语句解构成了 PHP 的函数来执行了。
  获取数据也可以是一个实例一样可以通过get方法获取,但是解构出来的 selct 语句 where 语句真的让我很反感。
  因为要写select where 函数都必须满足你懂sql语句的前提,那既然是sql通过分割得来的,那么为啥不干脆直接传入sql语句执行。
  反正不懂sql语句也没办法用那些函数来查询数据库的,这个点真的让我很懵圈,不够DB库内置了 Eloquent ,可能也算是框架简洁的一部分吧。
  然后就可以同过 artisan 创建 migrate 文件来创建数据库表
  也可以通过 migrate:seed 以及 faker 库来给数据库填充可靠的假数据,这个功能真的很出乎意料的棒。

登录验证

  我按照教程一步一步去做,成功完成了 captche 图片验证
  但是密码登录却一直无法返回成功值,即便我直接拷贝了教程的部分代码也一直验证密码是错误的。
  经过我很长时间的搜索也没有找到很好的解决方案(其实当时找到了解决方案,因为框架验证密码写在Model文件当中实现的,我当时完全按照教程的方法添加使用了trait代码块,并不认为添加多一个函数可以解决问题。 )
  我们实在找不到问题的原因,于是深入框架内部,看看到底是框架内部的验证哪里反馈了错误。
  然后才知道,验证代码的时候会自动将用户输入的密码进行 bcrypt 加密,确保数据库的密码是加密的。
  但是我现在数据库存储的就是明文,所以只能添加 getAuthPassword 函数来让获取的密码也bcrypt加密,保持一致。
  这样总算解决登录验证的问题。

登录验证错误反馈

  当PHP的验证错误之后,需要在前端反馈错误信息。
  这就涉及到 PHP 和 js 的交互,这也是我觉得前后端耦合,极度恶心的地方之一。
  毕竟是不同平台语言,PHP只能跳转回当前页面,将数据传递给 JS 来启动JS的时候出发错误报错。
  毕竟PHP是HTML的预处理器语言,所以它是将信息写到HTML当中,然后再通过浏览器解析JS来出发JS报错弹窗。
  所以我总算明白为什么学PHP的人要回JS,不会JS,不会前端还怎么写网页?!

后端的各个页面的逐一处理

  PHP最恶心我的地方出现了,毕竟我是前端出身的,PHP在这个地方给我带来严重的不适应。
  在Laravel框架中使用后缀 blade.php 来作为HTML模板
  通过HTML模板可以将 PHP 的变量输出到 HTML 页面上。
  然而双大括号的输出方式完全和前端的React 是一样的,而且前后端高度耦合,都不知道功能需求怎么分配。
  我个人是非常讨厌后端模板的,虽然在SEO上面有它的优势,但是后端模板于前端结合,很容易让两者的开发混在一起,一个人做还好,如果团队开发就理还乱剪不断了。

  另外 Laravel 是一个统一框架 而不是像 wordpress 那种一键部署
  所以所有的后端页面都需要手动写入,还得依赖前端的 es5 的开发知识,用jq等等框架去做。
  当然听过新版的 Laravel 框架也是支持 Vue 、 React 等前端热门框架的开发学习。
  但是要一个页面一个页面开发也是将我的耐心消磨殆尽了。

总结

  这次的Laravel框架最终以我的放弃宣告失败。
  毕竟是学前端先入为主了,我还是像学学 VUE 结合 Node 来做个后端。
  模板还是完全用js来弄比较舒服啊~~