博客列表 >laravel基础-laravel中的MVC流程和数据库原生查询

laravel基础-laravel中的MVC流程和数据库原生查询

岂几岂几
岂几岂几原创
2020年06月21日 23:29:13545浏览

laravel中的MVC流程和数据库原生查询

1. 路由

  • laravel中的所有请求都要通过路由解析, 才能找到对应的控制器和方法处理.

  • 一般使用 /routes/web.php 文件来编写所有路由即可.

  • 路由编写基本格式: Route::请求方式(路由地址, 控制器@方法) . 如: Route::get('/admins/admin/index', 'admins\Admin@index'); , Route::post('/admins/admin/save', 'admins\Admin@save'); .

  • 若请求URL中的路径, 在 /public 目录中, 有匹配请求路径的文件, 同时又有匹配到的路由, 则laravel会优先加载 /public 目录中的对应文件.

    • 借用laravel的这个特性, 可以把静态化的文件放到 /public 目录中, 实现站点静态化.
  • laravel没有通用路由一说, 每个请求都需要有对应的路由.

2. laravel中的MVC流程

2.1 laravel中的控制器

  • laravel的控制器文件要放在 /app/Http/Controllers 路径中, 支持子路径.

  • 控制器的命名空间要跟其相对于laravel根目录的物理路径一致, 否则laravel无法自动加载.

  • 控制器名称要跟控制器文件名称一致.

  • 需要继承 \App\Http\Controllers\Controller 基类.

  • 除开手动创建控制器类外, 也可以使用 artisan 命令创建控制器. 在laravel项目的根目录中, 打开命令行终端, 执行命令: php artisan make:controller 命名空间\控制器名 , 也可以创建控制器文件.

    • 其中命名空间是相对于 \App\Http\Controllers 的非完全限定命名空间.
  • 控制器示例:

1-控制器( Test.php ):

  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Routing\Controller;
  4. class Test extends Controller
  5. {
  6. public function index()
  7. {
  8. // 直接在前端输出"hello, laravel!";
  9. echo 'hello, laravel!';
  10. }
  11. }

2-路由(web.php片段):

  1. Route::get('/test/index', 'Test@index');

2.2 laravel中的视图

  • 在控制器中, 使用助手函数 view(视图路径, 需渲染的数据) 来加载和渲染视图.

    • 也可以用 view(视图路径)->with('参数名1', 参数值1)->with('参数名2', 参数值2)->...; 来渲染数据, 想用那种方式, 看自己喜好.
    • 其中视图路径是相对于 /resources/views 的路径.
      • 若视图文件名中包含 .blade , 则会被laravel视为 blade 模板引擎的模板, 经编译后生成纯PHP视图文件, 存放在 /storage/framework/views 路径中.
      • 若视图文件是没有 .blade 的纯PHP视图文件, 或者是 .html 文件, 则直接渲染该视图文件.
    • 需渲染的数据要以数组的形式传参.
  • 控制器获取视图并渲染数据示例:

1-返回视图的控制器( Test.php ):

  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Routing\Controller;
  4. class Test extends Controller
  5. {
  6. public function index()
  7. {
  8. // 使用参数往前端页面输出"hello, laravel!"
  9. $hello = 'hello, laravel!';
  10. return view('/index', ['hello' => $hello]);
  11. }
  12. }

2-视图文件( index.php )::

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>index.php</title>
  7. </head>
  8. <body>
  9. <h3><?php echo $hello ?></h3>
  10. </body>
  11. </html>

3-路由(web.php片段):

  1. Route::get('/test/index', 'Test@index');

2.3 laravel中的模型

  • laravel刻意弱化了模型的作用. 因为部分开发人员把模型用作编写公共业务逻辑的地方, 而也有另一部分人把模型用作跟数据库交互的类. 所以laravel无法二者兼顾, 所以其直接弱化了模型的作用. 但其倾向于第二种情况, 如: \App\Http\Controllers\User 类就是一个模型类. 跟数据库中的一个表关联.

3. laravel中操作数据库

3.1 连接数据库

  • .env 配置文件中, 有配置连接数据库参数的代码片段:
  1. // 数据库类型
  2. DB_CONNECTION=mysql
  3. // 数据库地址
  4. DB_HOST=127.0.0.1
  5. // 数据库监听端口
  6. DB_PORT=3306
  7. // 数据库名称
  8. DB_DATABASE=phpedu
  9. // 数据库用户名
  10. DB_USERNAME=root
  11. // 数据库密码
  12. DB_PASSWORD=root

3.1 使用原生的方式操作

1. 查询

  • 使用 DB::select(SQL查询语句, 绑定的参数数组) 完成查询.
  1. /* 数据库查询[原生查询] */
  2. public function get()
  3. {
  4. // DB类是laravel封装pdo的操作数据库的类, 一般用它的门面类做静态调用
  5. $query = DB::select('select * from `player` ');
  6. $data = [];
  7. foreach ($query as $item) {
  8. // 把对象转为数组
  9. $data[] = (array) $item;
  10. }
  11. $res = [];
  12. $res['data'] = $data;
  13. return view('player', $res);
  14. }

2. 修改, 删除, 插入

  • 使用 DB::update(SQL更新语句, 绑定的参数数组) 完成修改.

  • 如果更新的值跟原值相同, 则不计为影响的行数.

  • DB::select() 也能执行修改, 删除和插入的sql, 但返回值是空数组.

  1. /* 数据库更新[原生更新] */
  2. public function update()
  3. {
  4. // 注意, 如果更新的值跟原值相同, 则不计为影响的行数
  5. $res = DB::update('update `player` set `name` = "勒布朗-詹姆斯" where `id` = 1');
  6. var_dump($res);
  7. }
  • 删除, 插入操作用法跟修改类似. 示例略.
    • 使用 DB::insert(SQL插入语句, 绑定的参数数组) 完成插入.
    • 使用 DB::delete(SQL删除语句, 绑定的参数数组) 完成删除.

学习心得

  • laravel中, 所有请求必须先经过路由解析, 带能找到相应的处理控制器和方法. 但若 /public 目录中有跟请求地址相匹配的文件, 则优先加载这个匹配的文件.

  • laravel是一个基于MVC的web开发框架, 但是它弱化了模型(model)的作用.

  • 使用门面类 DB , 能实现原生的数据库增删改查操作.

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议