资讯专栏INFORMATION COLUMN

Laravel 从入口到输出过程详解

Harriet666 / 3428人阅读

摘要:预备知识目录后面简称目录后面简称入口文件过程详解范例定义路由文件路径修改如下定义中间件中间件路径新建中间件必须返回响应在处理请求之前做些什么在处理请求之后做些什么中间件处理完毕后,做些什么中间件处理完毕后,做些什么注册中间件中间件配件文件路

I. 预备知识 Laravel 目录
/path/to

后面简称 Laravel

Web 目录
Laravel/public

后面简称 Web

入口文件
Web/index.php
II. 过程详解

范例: http://la.com/test/yueshu/female/20?name=chenxuelong

1. 定义 web 路由

文件路径:

Laravel/routes/web.php

修改如下:

Route::get("/test/{name}/{sex}/{age}" , "TestController@test")
2. 定义中间件 2.1 中间件路径:
Laravel/app/Http/Middleware
2.2 新建中间件 Test.php
namespace AppHttpMiddleware;

use Closure;

class Test {
    /**
     * 必须返回响应(response)
     */
    public function handle($request , Closure $next){
        // 在处理请求之前做些什么...
        
        $response = $next($request);
        
        // 在处理请求之后做些什么
        
        return $response;
    }
    
    /**
     * 中间件处理完毕后,做些什么
     */
    public function terminate($request , $response){
        // 中间件处理完毕后,做些什么....
    }
}
2.3 注册中间件

中间件配件文件路径:

Laravel/app/Http/Kernel.php

routeMiddleware 键名下新增:

"Test" => AppHttpMiddlewareTest::class
4. 表单验证(请求)

文件存放目录:

Laravel/app/Http/Requests

新建 FormValidate.php 验证类:

/**
 * 验证不通过时,通过 header 中的 referer 重定向到
 * 上一页
 */
namespace AppHttpRequests;

use IlluminateFoundationHttpFormRequest;

class FormValidate extends FormRequest {
    // 是否经过授权的访问
    public function authorize(){
        return true;
    }  
    
    // 验证规则
    public function rules(){
        /**
         * required 表示必须
         * max:255  最大长度 255
         */
        return [
            "name" => "required|max:255"
        ];
    }
}
5. 模型

文件路径:

Laravel/app

新建模型 Test.php

namespace App;

use IlluminateDatabaseEloquentModel;

class Test extends Model {

    // 获取某张表的所有数据(查询构造器)
    public function get($table){
        DB::table($table)->get();
    }
    
    // 获取(原生 sql)
    public function select($sql , $params){
        DB::select($sql , $params);
    }
    
    // 插入(原生 sql)
    public functioin insert($sql , $params){
        DB::insert($sql , $params);
    }
    
    // 更新(原生 sql)
    public function update($sql , $params){
        DB::update($sql , $params);
    }
    
    // 删除(原生 sql)
    public function delete($sql , $params){
        DB::delete($sql , $params);
    }
    
    // 执行通用 sql(原生 sql)
    public function statement($sql , $params){
        DB::statement($sql , $params);
    }
    
    // 事务
    public function transaction($sql , callable $callback){
        DB::transaction($sql , $callback):
    }
    
    // 手动开启事务
    public function beginTransaction(){
        DB::beginTransaction();
    }
    
    // 手动回滚
    public function rollBack(){
        DB::rollBack();
    }
    
    // 提交
    public function commit(){
        DB::commit();
    }
    
    
}
6. 控制器

控制器路径:

Laravel/app/Http/Controllers

新建控制器 TestController.php

namespace AppHttpControllers;

use AppHttpControllersController;

// 引入请求验证类
use AppHttpRequestsFormValidate;

/* 可选注入模型类(分层)
 * 这边引入了一个 Test 模型类
 */
use AppTest;

class TestController extends Controller {

    // 构造器(可以添加中间件 或 注入)
    function __construct(Test $test){
        // 添加先前注册的中间件
        $this->middleware("Test");
        
        // 注入模型类
        $this->test = $test;
    }
    
    /**
     * 路由中设置的动作名称
     * 通过类型提示,引入请求验证
     */
    public function test(FormValidate $request , $name , $sex , $age){
        // 通过验证的请求.....
        $data = [];
        
        if (view()->exists("test")) {
            view("test" , $data);
        } else {
            exit("模板文件不存在....");
        }
    }
}
7. 视图

视图路径:

Laravel/resource/views

新建 test.blade.php 视图文件

Laravel 从入口到输出解析完毕!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25724.html

相关文章

  • Laravel 模板引擎(Blade)原理简析

    摘要:上次提到过,模板引擎一般是要做三件事情变量值的输出条件判断和循环引入或继承其他文件现在就来看看的模板引擎是如何来处理这三件事情的。引擎接下来就是本文的重点是如何编译的。如果有兴趣的话,也可以实现一个自己的模板解析引擎。 上次提到过,模板引擎一般是要做三件事情: 变量值的输出(echo) 条件判断和循环(if ... else、for、foreach、while) 引入或继承其他文件 ...

    vvpvvp 评论0 收藏0
  • PHP之内置web服务器

    摘要:首发于我的博客前言从开始,就提供了一个内置的服务器。在中的安装一节中介绍了一个命令可以使用内置服务器实现外部访问的命令。 首发于:我的博客 前言 PHP从5.4开始,就提供了一个内置的web服务器。 这个主要是用来做本地的开发用的。不能用于线上环境。现在我就介绍一下这个工具如何使用。 基础应用 首先我们假定项目目录是/home/baoguoxiao/www/php/demo,外界可访...

    MorePainMoreGain 评论0 收藏0
  • 高性能千万级定时任务管理服务forsun laravel插件使用详解

    摘要:高性能高精度定时服务,轻松管理千万级定时任务。支持任务到期触发和。支持创建延时任务和定时到期任务,和原生保持相同接口,轻松使用。不支持任务输出任务钩子及维护模式。是不指定任务名时自动生成,每个任务名必须唯一,相同任务名重复定义将会自动覆盖。 Forsun高性能高精度定时服务,轻松管理千万级定时任务。 定时服务项目地址:https://github.com/snower/forsun l...

    Muninn 评论0 收藏0
  • 基于 Laravel 开发 ThinkSNS+ 中前端的抉择(webpack/Vue)踩坑日记【社交

    摘要:在上一篇文章基于分支,从到,再到,简单的介绍了这里分享在开发过程中,前端选择的心理活动。而作为核心开发之一,也负责前端这块的开发。 在上一篇文章《 ThinkSNS+基于Laravel master分支,从1到 0,再到0.1》,简单的介绍了 ThinkSNS+ ,这里分享在开发过程中,前端选择的心理活动。 Laravel Mix的放弃 在 Laravel 中,前端工作流默认是由 la...

    songze 评论0 收藏0
  • LaravelLaravel 框架关键技术解析·读书笔记(一)

    摘要:判断是否存在构造函数,不存在直接实例化,存在则通过来获取输入函数,并有相应的方法解决依赖参数问题,实现依赖注入。 Laravel 框架关键技术解析·读书笔记(一) 第一章 入口文件 请求访问的入口文件,主要完成几部分工作,分别是: 自动加载函数的添加 服务器实例化与服务注册 路由加载 请求实例化与路由分发 相应生成与发送 其中,自动加载函数用于包含引用文件,改文件是composer...

    CocoaChina 评论0 收藏0

发表评论

0条评论

Harriet666

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<