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
目录中的对应文件.
/public
目录中, 实现站点静态化.laravel没有通用路由一说, 每个请求都需要有对应的路由.
laravel的控制器文件要放在 /app/Http/Controllers
路径中, 支持子路径.
控制器的命名空间要跟其相对于laravel根目录的物理路径一致, 否则laravel无法自动加载.
控制器名称要跟控制器文件名称一致.
需要继承 \App\Http\Controllers\Controller
基类.
除开手动创建控制器类外, 也可以使用 artisan
命令创建控制器. 在laravel项目的根目录中, 打开命令行终端, 执行命令: php artisan make:controller 命名空间\控制器名
, 也可以创建控制器文件.
\App\Http\Controllers
的非完全限定命名空间.控制器示例:
1-控制器( Test.php
):
<?php
namespace App\Http\Controllers;
use Illuminate\Routing\Controller;
class Test extends Controller
{
public function index()
{
// 直接在前端输出"hello, laravel!";
echo 'hello, laravel!';
}
}
2-路由(web.php片段):
Route::get('/test/index', 'Test@index');
在控制器中, 使用助手函数 view(视图路径, 需渲染的数据)
来加载和渲染视图.
view(视图路径)->with('参数名1', 参数值1)->with('参数名2', 参数值2)->...;
来渲染数据, 想用那种方式, 看自己喜好./resources/views
的路径. .blade
, 则会被laravel视为 blade
模板引擎的模板, 经编译后生成纯PHP视图文件, 存放在 /storage/framework/views
路径中..blade
的纯PHP视图文件, 或者是 .html
文件, 则直接渲染该视图文件.控制器获取视图并渲染数据示例:
1-返回视图的控制器( Test.php
):
<?php
namespace App\Http\Controllers;
use Illuminate\Routing\Controller;
class Test extends Controller
{
public function index()
{
// 使用参数往前端页面输出"hello, laravel!"
$hello = 'hello, laravel!';
return view('/index', ['hello' => $hello]);
}
}
2-视图文件( index.php
)::
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index.php</title>
</head>
<body>
<h3><?php echo $hello ?></h3>
</body>
</html>
3-路由(web.php片段):
Route::get('/test/index', 'Test@index');
\App\Http\Controllers\User
类就是一个模型类. 跟数据库中的一个表关联..env
配置文件中, 有配置连接数据库参数的代码片段:
// 数据库类型
DB_CONNECTION=mysql
// 数据库地址
DB_HOST=127.0.0.1
// 数据库监听端口
DB_PORT=3306
// 数据库名称
DB_DATABASE=phpedu
// 数据库用户名
DB_USERNAME=root
// 数据库密码
DB_PASSWORD=root
DB::select(SQL查询语句, 绑定的参数数组)
完成查询.
/* 数据库查询[原生查询] */
public function get()
{
// DB类是laravel封装pdo的操作数据库的类, 一般用它的门面类做静态调用
$query = DB::select('select * from `player` ');
$data = [];
foreach ($query as $item) {
// 把对象转为数组
$data[] = (array) $item;
}
$res = [];
$res['data'] = $data;
return view('player', $res);
}
使用 DB::update(SQL更新语句, 绑定的参数数组)
完成修改.
如果更新的值跟原值相同, 则不计为影响的行数.
DB::select()
也能执行修改, 删除和插入的sql, 但返回值是空数组.
/* 数据库更新[原生更新] */
public function update()
{
// 注意, 如果更新的值跟原值相同, 则不计为影响的行数
$res = DB::update('update `player` set `name` = "勒布朗-詹姆斯" where `id` = 1');
var_dump($res);
}
DB::insert(SQL插入语句, 绑定的参数数组)
完成插入.DB::delete(SQL删除语句, 绑定的参数数组)
完成删除.laravel中, 所有请求必须先经过路由解析, 带能找到相应的处理控制器和方法. 但若 /public
目录中有跟请求地址相匹配的文件, 则优先加载这个匹配的文件.
laravel是一个基于MVC的web开发框架, 但是它弱化了模型(model)的作用.
使用门面类 DB
, 能实现原生的数据库增删改查操作.