zoukankan      html  css  js  c++  java
  • Laravel入坑指南(2)——路由、控制器

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

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

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

    一、路由

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

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

    IlluminateSupportFacadesRoute::get('/', function () {
        return "welcome";
    });

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

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

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

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

    IlluminateSupportFacadesRoute::any('/hello',"MyController@hello");

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

    二、控制器

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

    php artisan make:controller MyController

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

    <?php
    namespace AppHttpControllers;
    
    use IlluminateHttpRequest;
    
    class MyController extends Controller
    {
    
        public function hello()
        {
            return "hello world";
        }
    }

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

    三、路由(2)

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

    IlluminateSupportFacadesRoute::get('/admin/{param}',function($param){
        return $param;   
    });

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

    IlluminateSupportFacadesRoute::any('/hello/{id?}',"MyController@hello");

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

    namespace AppHttpControllers;
    
    use IlluminateHttpRequest;
    
    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目录下。

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

    IlluminateSupportFacadesRoute::any('/test',"Web\TestController@action");

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

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

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

  • 相关阅读:
    二叉树相关题目
    二叉树的遍历
    mysql获取某个表中除了某个字段名外的所有字段名
    设计模式之原型模式
    设计模式之工厂方法模式
    设计模式之代理模式
    设计模式之装饰模式
    设计模式之策略模式
    设计模式之简单工厂模式
    Redis的使用及参考代码
  • 原文地址:https://www.cnblogs.com/ddcoder/p/13294331.html
Copyright © 2011-2022 走看看