Blogger Information
Blog 57
fans 3
comment 0
visits 60348
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
laravel基础-laravel中的MVC流程和数据库原生查询
岂几岂几
Original
541 people have browsed it

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 , 能实现原生的数据库增删改查操作.

Correcting teacher:WJWJ

Correction status:qualified

Teacher's comments:写的很认真仔细,继续加油!
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!