路由 (route) 、控制器 (controller) 和视图模板(view)的设计


本章节目录

    路由 (route) 的设计

    注意:在 Laravel 8 中,需要在 app/Providers/RouteServiceProvider.php 文件中取消 protected $namespace = ‘App\Http\Controllers’ 的注释,不然会遇到“Target class controller does not exist” 的错误。

    如果想使用 PHP callable 特性的话,可以保持不变,不过路由需要使用 callable 语法来编写,具体可以参考官方文档:
    https://laravel.com/docs/8.x/upgrade#routing

    路由用于定义项目资源的访问入口,所有的路由定义文件都位于 routes 文件夹下,本课程用到的路由文件是 routes/web.php。

    路由代码如下:

    <?php
    Route::get("/", ['as' => 'index', 'uses' => 'FeedbackController@index']); // 留言本访问入口
    Route::post("/store", ['as' => 'store', 'uses' => 'FeedbackController@store']); // 存储留言内容
    Route::delete("/{id}}", ['as' => 'destroy', 'uses' => 'FeedbackController@destroy']); // 删除留言记录
    Route::get("/{id}/edit", ['as' => 'edit', 'uses' => 'FeedbackController@edit']); // 编辑留言记录界面
    Route::put("/{id}", ['as' => 'update', 'uses' => 'FeedbackController@update']); // 提交更新留言记录
    

    其实以上这些路由定义只需要一个资源路由:Route::resource(‘feedback’, ‘FeedbackController’); 即可实现,为了方便课程 CURD 操作更直观的进行,这里做了分拆。

    查看已经有路由

    使用命令 php artisan route:list 可以查到项目中已经有的路由列表,如下图所示:

    注意,一定要在建立好控制器文件后再执行命令,不然会报错。

    路由(route)的更多细节请查阅官方文档:

    英文版本:https://laravel.com/docs/8.x/routing

    控制器 (controller) 的设计

    Laravel 的控制器文件存放在 app/Http/Controllers 目录下,我们可以直接在此文件下建立 FeedbackController.php 文件,也可以使用命令 php artisan make:controller FeedbackController 来生成一个没有方法的控制器。

    我们了可以在命令后添加上 --resource 参数来生成已带有资源操作方法的控制器,完整命令:php artisan make:controller FeedbackController --resource

    最终我们的控制器如下代码所示:

    <?php
    namespace App\Http\Controllers;
    
    class FeedbackController extends Controller
    {
        /**
         * 留言首页
         */
        public function index()
        {
        }
    
        /**
         * 存储留言
         */
        public function store()
        {
        }
    
        /**
         * 编辑留言
         * @param $id
         */
        public function edit($id)
        {
        }
    
        /**
         * 更新留言
         * @param $id
         */
        public function update($id)
        {
        }
    
        /**
         * 删除留言
         * @param $id
         */
        public function destroy($id)
        {
        }
    
    }
    

    控制器(Controller)的更多细节请查阅官方文档:

    英文版本:https://laravel.com/docs/8.x/controllers

    视图模板(view)的设计

    新建 blade 模板文件

    Laravel 使用 Blade 模板引擎,blade 模板的扩展名是 .blade.php。

    在 resources/views 目录下新建 index.blade.php 文件用于显示留言板首页。

    代码实现

    代码实现如下:

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>麻辣讲留言板系统</title>
        <link rel="shortcut icon" type="image/x-icon" href="https://img.malajiang.com/assets/web/img/favicon.png"/>
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
    <div class="container">
        <h2 class="text-center">麻辣讲留言板系统</h2>
        <h6 class="text-center">Laravel 最佳实践</h6>
        <hr>
        <form action="" method="post">
            <div class="form-group">
                <label for="name">您的姓名</label>
                <input type="text" name="name" class="form-control form-inline" id="name" placeholder="请输入您的姓名">
            </div>
            <div class="form-group">
                <label for="phone">您的手机</label>
                <input type="text" class="form-control" name="phone" id="phone" placeholder="请输入您的手机号码">
            </div>
            <div class="form-group">
                <label for="title">留言标题</label>
                <input type="text" class="form-control" name="title" id="title" placeholder="请输入您的留言标题">
            </div>
            <div class="form-group">
                <label for="content">留言内容</label>
                <textarea class="form-control" name="content" rows="5" placeholder="在这里输入您的留言内容"></textarea>
            </div>
            <hr>
            <button type="submit" class="btn btn-default">提交</button>
        </form>
        <h4>已经有留言(33 条)</h4>
        <hr>
        <table class="table table-bordered">
            <thead>
            <tr>
                <th width="10">ID</th>
                <th width="80">留言者</th>
                <th width="100">手机号码</th>
                <th width="150">标题</th>
                <th>内容</th>
                <th width="100">留言时间</th>
                <th width="100">操作</th>
            </tr>
            </thead>
            <tbody>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td>
                </td>
            </tr>
            </tbody>
        </table>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
    </body>
    </html>
    

    注:本课程使用 BootStrap3 做为前端框架,在课程的前期准备中也有说明。BootStrap 3 详细请查阅中文文档:https://v3.bootcss.com/

    显示页面

    建立好页面后,我们需要在 FeedbackController 控制中的 index() 方法里指定渲染此模板文件。

    打开文件:app/Http/Controllers/FeedbackController.php

    在 index() 方法中增加相应代码:

    public function index()
    {
        return view("index");
    }
    

    view 方法用于指定控制器方法要显示的模板文件,默认路径为 resources/views,只需要文件名即可,balde 模板的后缀 .blade.php 不需要添加。

    修改默认存放路径

    如果有特殊需求,可以在 config/view.php 文件中修改 blade 模板的默认存放路径。

    blade 模板的更多细节请查阅官方文档:
    英文文档:https://laravel.com/docs/8.x/blade


    请先 登录
    审核后显示
    讨论记录(0 条)
    暂时还没有讨论

    © 2024 麻辣讲 豫ICP备19017310号-2