laravel 学习之路 路由视图初探

2019-12-18 17:41:29 浏览数 (1)

我大致了解了 laravel 下,在开始一个 Http 程序需要先定义路由。之前的例子中,我们的业务逻辑都是在路由里实现,这对于简单的网站或 web 应用没什么问题,当我们需要扩大规模,程序变得复杂,分层的业务逻辑更为适合。这时候,我们就应该使用控制器。 了解 MVC 的都对控制器的作用有所了解,控制器是实现主要业务逻辑的。在其他框架,控制器一般就是一个类,laravel 也不例外,laravel 的控制其结构并没有什么特殊。

代码语言:javascript复制
<?php

namespace AppHttpControllers;

use AppUser;
use AppHttpControllersController;

class UserController extends Controller
{
    /**
     * @return string
     */
    public function index($id)
    {
        return 'hello world!';
    }
}

Route(路由)是什么?

路由就是网络请求的 url 与 laravel 应用层的逻辑处理地址的对应关系。 通俗的说:路由就是把url的请求优雅的对应到你想要执行的操作方法,路由的作用是简化URL访问地址,并根据定义的路由类型做出正确的解析。

laravel 中的路由 跟路由器很像好比你家里只有一根网线网线上接着 wifi 路由器,多部手机和电脑就可以通过 wifi 上网了,路由器起到了一个分发的作用,大致是这样实现的

我们访问项目的时候最先请求到的是index.php这个入口文件这个 public/index.php 这个时候我们把public/index.php 比作网线,route/web.php 类比成路由器设备,controller控制器比作多部手机设备变很好理解

配置路由

laravel 的每一个路由是需要手动定义的,Laravel 的控制器非常的干净,与其他类的耦合度相当的低。得益于 laravelIoC 容器,我们很容易实现相当丰富的功能,且不会产生紧密耦合。那么如何才能访问到这个控制器里的逻辑呢?

  1. 我们所知道的许多框架,通常有着既定的路由规则,我个人比较熟悉 TP,TP 的默认路由规则是 http://xxxx/Module/Controller/Action,假如我们访问http://xxxx/Content/Home/index,默认会将请求派发至 Content 模块下的HomeController类的 index 方法。

  1. ThinkPHP 这种默认路由规则使得框架开箱即用,十分便捷。但是这样并不灵活,假如我想通过访问 http://xxxx/user/1 就访问到 UserController 控制器下的 show 方法并包含一个值为 1 的参数,ThinkPHP 你需要修改配置(并且那个配置非常不优雅),亦或者我想要通过向 http://xxxx/topic POST 一个数据以添加一篇文章,处理这个过程的实际是 AdminTopicController 类的 create 方法,且该方法只接受 POST 请求,这时候似乎大多数框架就要通过写更多的代码实现了。
  2. 说到这里,似乎大家是不是想起了 laravel 那种路由定义方式的好处了?虽然 laravel 没有强加给你既定的路由规则,但你拥有了更多定制的权利,并且 laravel 定义路由的方式非常优雅,带给你的体验非常丰富。另一个好消息是,定义控制器路由和普通路由有所差别,这个差别是在便利性上的,你将很快感受到这种便利带给你的好处! 打开 routes/web.php 我们直接看代码

其中 Route 是一个静态类 ,getRoute类的静态方法,get方法传递了2个参数,第一个是 / 、第二个是一个闭包并且在闭包函数中return返回的东西就是我们请求到的内容,从中可以看出

  1. Route:: 后面可以跟一个请求方法代码中就是 get 请求,那么很容易就联想到如果写成 post 哪就表示是接受一个post请求
  2. 斜杠 / 表示首页 在 url 中就是域名后面的那个斜杠 study.laraveltest.com/ 只不过后面如果没有其他内容的话一般是被省略了于是我们就很容易的模仿一下 Route::get('test1', function () { return view('welcome'); }); 这样的写的话那 url 就应该是 http://study.laraveltest.com/article
  3. view 函数可以直接定位到 resources/views 目录,它可以接受一个参数这个参数就是 resources/views 目录下的文件名去掉 blade.php 后缀,这样我们创建一个hello.blade.php文件 里面写个hello world吧,

在注册下路由 Route::get('hello', function () { return view('hello'); }); 我们访问 http://study.laraveltest.com/hello 看到这样的内容就表示成功了;

如果访问 http://study.laraveltest.com/hello 报错可以试一下http://study.laraveltest.com/index.php/hello 加了 index.php 就正常了的话说明是没有成功开启 rewrite ;

0 人点赞