Laravel 的 MVC 与 Router

Laravel 的 MVC 架构

Laravel MVC 架构
Controller 负责接收并处理由 Routes 转发来的请求(request)
Model 负责资料业务逻辑与资料库交互
View 负责资料渲染和前端页面互动
使用者输入 URL 到 server 然後经过 web 应用程序的 routes 部分, 来决定由哪一个 controller 处理请求, 然後 controller 里决定决定执行何种业务逻辑, 业务逻辑实际执行经由 model 完成, 执行业务逻辑的中间可能会连接资料库, controller 得到 model 执行完业务逻辑後的资料後, 将相关资料传给 view 去渲染画面给使用者, 以目前前後端分离开发模式来说, controller 会将得到的资料直接回传给前端团队开发的端模组, view 的部分就不用了.

Laravel routes 的使用

laravel routes 的定义都放在 routes 目录下, 可以使用 artisan 指令查看目前的所有路由映射

php artisan route:list ## 查看目前的路由

Routes.png
Method 栏位表示接受的请求方式(request method), URI 栏位就是请求路径, Action 栏位代表相对应的处理, Middleware 栏位表示会经过的中介软件
我们可以打开 routes/app.php, routes/web.php

<?php
// web.php
use Illuminate\Support\Facades\Route;
// 使用 Route Facade 来定义路由, Facade 是 Laravel 提供的静态代理
// 这里的 get 表示 method, 支持所有的 HTTP Method, 可以用 any 表所有方式
Route::get('/', function () {  
    return view('welcome');    // 这里定义了路径 "/", 相关处理为一个闭包(Closure)
});
<?php
// api.php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
// 先经过中介软件 auth:sanctum, auth 是中介软件, 冒号後面的 sanctum 代表参数, 
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();   
});
// 这里也定义相关处理为一个闭包, 但看路径定义是 /user, 怎麽当初指令显示的是 api/user
// 这里只是定义了路由服务, 我们要注册到对应的 srever container里面在能用, 
// 也就是 app/Providers/RouteServiceProvider.php 这个档案有关, 
<?php
// RouteServiceProvider.php
// 这里只撷取注册服务相关的 boot 方法

public function boot()
    {
        $this->configureRateLimiting();

        $this->routes(function () {
            Route::prefix('api')    // 这里定义了前缀 api, 所以真正的路径会是 api/user
                ->middleware('api')
                ->namespace($this->namespace)
                ->group(base_path('routes/api.php'));

            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/web.php'));
        });
    }

Laravel route 也可以设定重新导向, 301 永久重新导向, 302 临时重新导向, 重新导向搜索引擎会收录重新导向前的地址, 永久重新导向则是收录重新导向後的地址, 这会影响 SEO

<?php
Route::get('here', function () {
  return '重新导向前';
}); 
Route::get('there', function () {
  return '重新导向後';
}); 
Route::permanentRedirect('here', 'there');  // 永久
Route::redirect('here', 'there'); // 临时

<<:  Day14:今天来谈一下Microsoft Defender for Endpoint中的威胁与弱点管理

>>:  [Day13] React Native - 整理资料流,使用 Redux 吧!

Day 29 洞悉消费者的心

消费者每天搜寻的字词中,根据 Google 的统计,每天有 15% 以上的新的搜寻字词出现。因此编辑...

#27-微互动折线图动态!就是要比较才看得出结果啊 (D3.js)

前两天都是展现Data而已,今天来试做看看互动&换资料的动态! 折线图也是满常见的样式, 这次以非洲...

Day 8 - 导入 Google Fonts

昨天讲了文字使用,今天来讲讲字体。在默认情况下,Tailwind 提供了三种字体系列:font-sa...

Angular Stock实作流程说明(Day20)

介绍完视觉化套件之後,我们就要开始进入实作了,要在十天内做完一个简易登入+资料视觉化呈现对Angul...

关於伪类 ( pseudo-class )

伪类选取器 ( pseudo-class ) 或是也被称为拟态选择器,可以用来设定 HTML 元素在...