接上一节,我们已经把Laravel有Hello World项目跑起来了。

现在各位小友最着急的,应该是想了解,我们怎么在“页面”echo一个自己的Hello World字符串。

“页面”这个概念,是源于web1.0;那时候,web服务器根据用户申请的URL,去寻找服务器上对应的文件,把文件内容输出到客户端。用户的每一次申请,可以在浏览器中看到一个类似于记录在笔记本上的“页面”。现在,随着web发展的日新月异,这一简单的模型已经不能足程序猿的脑洞。所以当下流行的框架,都会根据客户端(注意:这里用词是“客户端”)访问的URL(或请求参数),去调用对应的业务流程,然后将业务流程的执行结果返回给用户。在这个过程中,URL(或请求参数)与业务流程对应的规则就是路由;而业务流程一般会封装成类,这个就是控制器。来张灵魂画图:

一、路由

所有web的路由规则,定义在项目根目录/routes/web.php中。(有同学会问,那其它路由呢?不要急,反正其它路由你现在也用不到)

让我们看看下面这一段代码:

\Illuminate\Support\Facades\Route::get('/', function () {
return "welcome";
});

这段代码的意思就是,客户端访问http://域名/,就可以拿到一个welcome的响应。

其中:get是请求方法,这段路由规则只对get请求生效。也可以用post;当然除了get和post,所有http的请求类型,都有对应的函数put、patch、delete、options等。(什么是请求方法?同学如果你问了这个问题,只能点击博文最后的链接,加微信联系我,我帮你开个小灶补习一下)

如果想要用对所有请求类型生效,可以用any;如果想要对指定的部分请求类型生效,可以用match。

到这里,我们知道了路由的最简单用法。有些同学会问了,控制器呢?我们再来看一段路由代码:

\Illuminate\Support\Facades\Route::any('/hello',"MyController@hello");

这段路由代码的意思是,用户访问http://域名/hello,框架就会实例化MyController这个控制器内,调用类中hello这个成员函数。我们的业务流程就是写在这个位置。现在我们开始了解,这个类在哪里,这个函数怎么写。

二、控制器

本文第一部分最后提到,MyController这个控制器。我们在命令行下,将当前路径cd到项目根目录下,执行

php artisan make:controller MyController

这时,框架就会自动在/app/Http/Controllers这个目录下,帮我们建出一个MyController.php的文件。这个文件中的类就是MyController,如下所示:

<?php
namespace App\Http\Controllers; use Illuminate\Http\Request; class MyController extends Controller
{ public function hello()
{
return "hello world";
}
}

接第一部分的话,用户访问http://域名/hello,框架就会实例化MyController这个控制器内,调用类中hello这个成员函数,客户端就可以得到一个hello world的输出。

三、路由(2)

让我们再看看路由,本节第一部分讨论了路由最简单的部分。但是,对于路由,我们不仅是为了提供选择控制器的标准,也要允许传递一些参数。现在让我们看看下面两个例子:

\Illuminate\Support\Facades\Route::get('/admin/{param}',function($param){
return $param;
});

上面这个例子,在http://域名/admin/后面可以添加一个参数,而且必须要求添加,这个参数可以能过$param这个变量获取。

\Illuminate\Support\Facades\Route::any('/hello/{id?}',"MyController@hello");

在这个例子中,同样的http://域名/hello/后面可以添加一个参数,但是这个参数是可选的。在MyController的hello成员中可以用如下方法获取:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class MyController extends Controller
{
//
public function hello(Request $req,$id='')
{ echo $id,"<br />";
echo $req->id,'<br />';
return "";
}
}

(至于上面这个Request类是干啥的?小伙伴们先不用深究。当然,一眼看过去,也知道是接收用户请求参数用的。)

四、控制器(2)

到了这里,大家对路由和控制器已经有初步有印象了。我们现在还有一个问题要解决:现在所有的controller都放在了/app/Http/Controllers目录下,但是我们为了区分不同的模块业务,通常希望把各个控制器划分到不同的目录下,怎么办?我们可以用以下方法创建控制器:

php artisan make:controller ./Web/TestController

这个命令把TestController创建到了/app/Http/Controllers/Web目录下。

之后我们可以用下面这个路由进行引用:

\Illuminate\Support\Facades\Route::any('/test',"Web\\TestController@action");

好了,到这里路由与控制器最常用的知识已经介绍完成,我们可以愉快地写业务了。当然,这两个话题还有很多更灵活复杂的用法,有兴趣的小伴自行阅读官方手册。24小时入坑Laravel这部分到这里结束,大家下回见:)

---------------------------  我是可爱的分割线  ----------------------------

最后博主借地宣传一下,漳州编程小组招新了,这是一个面向漳州青少年信息学/软件设计的学习小组,有意向的同学点击链接,联系我吧。

Laravel入坑指南(2)——路由、控制器的更多相关文章

  1. Angular 从入坑到挖坑 - 路由守卫连连看

    一.Overview Angular 入坑记录的笔记第六篇,介绍 Angular 路由模块中关于路由守卫的相关知识点,了解常用到的路由守卫接口,知道如何通过实现路由守卫接口来实现特定的功能需求,以及实 ...

  2. Phalcon如何切换数据库《Phalcon入坑指南系列 三》

    本系列目录 一.Phalcon在Windows上安装 <Phalcon入坑指南系列 一> 二.Phalcon入坑必须知道的功能(项目配置.控制器.模型.增.删.改.查) 三.Phalcon ...

  3. Phalcon如何创建多模块并能进行访问 《Phalcon入坑指南系列 四》

    本系列目录 一.Phalcon在Windows上安装 <Phalcon入坑指南系列 一> 二.Phalcon入坑必须知道的功能<Phalcon入坑指南系列 二> 三.Phalc ...

  4. Phalcon多模块如何实现连接不同数据库 《Phalcon入坑指南系列 五》

    本系列目录 一.Phalcon在Windows上安装 <Phalcon入坑指南系列 一> 二.Phalcon入坑必须知道的功能<Phalcon入坑指南系列 二> 三.Phalc ...

  5. electron入坑指南

    electron入坑指南 简介 electron 实际集成chrome浏览器和node环境, 运行你写的网页 app 基本目录结构 index.html 名称可以不是index, 这个文件与普通网页的 ...

  6. C语言入坑指南-被遗忘的初始化

    前言 什么是初始化?为什么要初始化?静态变量和局部变量的初始化又有什么区别?实际应用中应该怎么做?本文将一一回答这些问题. 什么是初始化 初始化指的是对数据对象或者变量赋予初始值.例如: int va ...

  7. Elasticsearch入坑指南之RESTful API

    Elasticsearch入坑指南之RESTful API Tags:Elasticsearch ES为开发者提供了非常丰富的基于Http协议的Rest API,通过简单的Rest请求,就可以实现非常 ...

  8. ElasticSearch入坑指南之概述及安装

    ---恢复内容开始--- ElasticSearch入坑指南之概述及安装 了解ElasticSearch ElasticSearch(简称ES)基于Lucene的分布式全文检索引擎.使用ES可以实现近 ...

  9. eclipse中导入外部包却无法查看对应源码或Javadoc的入坑指南

    eclipse中导入外部包却无法查看对应源码或Javadoc的 入坑指南 出现这个错误的原因是,你虽然导入了.jar包,但没有配置对应的Javadoc或源码路径,所以在编辑器中无法查看源 码和对应AP ...

  10. Rust入坑指南:核心概念

    如果说前面的坑我们一直在用小铲子挖的话,那么今天的坑就是用挖掘机挖的. 今天要介绍的是Rust的一个核心概念:Ownership.全文将分为什么是Ownership以及Ownership的传递类型两部 ...

随机推荐

  1. SpringMVC05——SSM整合

    整合SSM 需求:熟练掌握MySQL数据库,Spring,JavaWeb及MyBatis知识,简单的前端知识 CREATE DATABASE `ssmbuild`; USE `ssmbuild`; D ...

  2. [转帖]如何不耍流氓的做运维之-SHELL脚本

    https://www.cnblogs.com/luoahong/articles/8504691.html 前言 大家都是文明人,尤其是做运维的,那叫一个斯文啊.怎么能耍流氓呢?赶紧看看,编写SHE ...

  3. [转帖]centos7离线安装postgresql13

    https://www.cnblogs.com/summer-88/p/15341918.html 在一台可以联网的centos上安装postgresql源 yum install -y https: ...

  4. [转帖]Linux—解压缩命令总结(tar/zip)

    https://www.jianshu.com/p/1ad5d852d13b 1 tar 1.2 tar介绍   tar命令是linux系统中对文件和目录解压缩命令.tar命令可以用于对后缀名为.ta ...

  5. [转帖]Linux禁用CPU省电状态/Linux系统性能调优

    https://www.jianshu.com/p/945168b47487 How to Disable CPU Power Saving States on a Redhat or Suse Li ...

  6. [转帖]gdb调试常见命令详细总结(附示例操作)

    一.简介 通过gdb调试我们可以监控程序执行的每一个细节,包括变量的值.函数的调用过程.内存中数据.线程的调度等,从而发现隐藏的错误或者低效的代码,程序的调试过程主要有:单步执行,跳入函数,跳出函数, ...

  7. 基于spring security创建基本项目框架

    SpringBoot建项目步骤 建表 新建项目 (package name可以自定义,整个项目只能在该包下) 选择可能有到的依赖 (别忘了勾选SQL中的Mybatis Framework,创建项目 如 ...

  8. (数据科学学习手札122)Python+Dash快速web应用开发——内网穿透篇

    由我开源的先进Dash组件库feffery-antd-components正处于早期测试版本阶段,欢迎前往官网http://fac.feffery.tech/了解更多 1 简介 这是我的系列教程Pyt ...

  9. ClickHouse(08)ClickHouse表引擎概况

    目录 合并树家族 日志引擎系列 集成的表引擎 其他特殊的引擎 资料分享 参考文章 目前ClickHouse的表引擎主要有下面四个系列,合并树家族.日志引擎系列.集成的表引擎和其他特殊的引擎. 合并树家 ...

  10. 为游戏接入ios sdk的oc学习笔记

    开发手机游戏,需要接入ios的sdk,截止2021年7月23日虽然swift已经推出一些年头,但对于大部分的渠道sdk,还是oc的代码. oc不仅仅用来开发ios,还是mac上的app开发语言 从新手 ...