[Laravel 入门教程] 学习笔记 1

作为一个纯 0 基础的入门选手,在工作之余,用业余时间终于完成了《Laravel 入门教程》的第一刷,到后面几章,基本是纯按图索骥了,很多细节都懵懵懂懂。
现在开始第二刷,发现很多后面的知识和前面的框架相结合,能够碰撞出很多的新理解;所以,我打算把这些理解记录下来,帮助和我一样的零基础朋友们学习 Laravel【其中很多内容基于我现在的理解,有可能是错误的,欢迎指正】:
第一部分 整体理解:
这张图很好的说明了,在 Laravel 架构下,用户访问 URL 的流程:
file
但到后来的编程中,大家会发现无论是 Route, Controller,还是 Model,View 都是 PHP 文件,也就是说 Laravel 创建了一个由 PHP 语言构建的框架,把由多种语言组成的前后端编程,变成了基本由 PHP 或者相近需要构建的规则,然后编译成各种操作。
最开始,我们会很自然的认为 Controller 是 MVC 的核心,因为他负责联络 Route、Model 和 View,核心的逻辑应该写在 Controller 里面,而且在后面的学习里面,Controller 里面的代码量是最多的。
但最近看到一篇文章《深入理解 MVC》
https://zhuanlan.zhihu.com/p/35680070
觉得很有道理,Controller 应该主要担当前后端的连接角色,业务逻辑在 Model 里,这样业务逻辑发生变化的时候;只需要重新建一个 Model,然后在 Controller 里进行重新链接了。这个估计需要在未来的高阶教程中慢慢的领悟了。

第二部分 Route 和 MVC 的理解:
Route 将前端页面用户的不同行为 GET, POST, PATCH, DELETE,引导至不同的 Controller 下面的不同方法即不同 function,其中使用 name 属性可以在前端使用 {{route ('home')}} 的写法进行动态链接:

Route::get('/', 'StaticPagesController@home')->name('home');
Route::get('/help', 'StaticPagesController@help')->name('help');
Route::get('/about', 'StaticPagesController@about')->name('about');

Controller 包含了各种方法的具体内容,在这里包含了页面调用,表单数据验证、表单提交至数据库等等。

<?php namespace App\Http\Controllers;
.
.
.
class UsersController extends Controller
{
    public function create() 
    {
        return view('users.create');    // 页面调用
    } 

    public function store(Request $request)
    {
        $this->validate($request, [
            'name' => 'required|max:50',
            'email' => 'required|email|unique:users|max:255',
            'password' => 'required|confirmed|min:6'
        ]);   // 表单验证

        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => bcrypt($request->password),
        ]);  // 表单提交至用户Model - 数据库

        session()->flash('success', '欢迎,您将在这里开启一段新的旅程~');  // 表单提交后操作
        return redirect()->route('users.show', [$user]);   // 表单提交后页面重定向
    }
        }
        

Model 是数据模型,包含了数据处理的核心逻辑,这块对于像我这样 0 基础的同学们来说,理解起来稍微有点复杂,目前我是这样理解的:
每个数据模型默认对应了一个数据库,在 Laravel 的默认约定是:User 数据模型类对应着 users 表,在创建的时候:

$ php artisan make:model Models/Article --migration
Model created successfully.
Created Migration: 2016_09_10_023235_create_articles_table

而数据库 migration 文件并不是数据库本身,而是表头设置文件,需要:

$ php artisan migrate

导入表头文件,而如果需要在现有的数据库增加表头列而清除现有数据的话,可以新建一个数据迁移 migration 文件,然后在最后 --table=users 来指定要修改的表:

$ php artisan make:migration add_activation_to_users_table --table=users

在具体实现中,Laravel 通过一些约定,使得数据库到 Model,Model 到 Controller,Controller 到 View 均可以传递参数,从而实现了前端到后端,后端到前端的动态交互。

最后 View 使用 php 的 blade 语法和 SASS 定义渲染的规则,注意并不是前端代码本身,因此需要 npm run watch-poll 做编译,在 public 下生成 html, JS 和 CSS,这块的通用视图和局部视图的用法大大的缩减了代码量和维护的难度。在课程中,我首次的时候使用 npm run watch-poll 是没有问题的,第二次创建的时候就出错了,根据对应章节里面的解决方案,给大家一个参考的解决方案:

$ sudo apt-get install libpng16-dev
$ yarn install —no-bin-links
$ yarn add cross-env

以上,是我目前的一些理解,目前在进行三刷,并同时记录一些领悟和想法,希望能够帮自己理清思路,同时也帮助到同样零基础的朋友们。

本作品采用《CC 协议》,转载必须注明作者和本文链接
peterxu
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。