批改状态:合格
老师批语:编辑器的检查功能, 说到底是只是辅助, 可以将这些提示关掉的.. 同样, 框架也只是辅助工具, 不能全靠它
composer create-project laravel/laravel
关于网站创建 网站的根目录 一定要选择 laravel 中的 public 目录,否则 laravel 无法运行
关于时间戳 laeavel 默认为国外时区 需要修改为中国时区
'timezone' => 'UTC', 修改为 'timezone' => 'Asia/Shanghai', 即可vendor 目录 是整个框架的类库 不要去修改
我们应该把注意力放到 app 目录 route 目录
laravel 中所有的请求 必须走路由 不走路由访问不了
比如我们想访问 www.xxx.xxx/admin 直接访问会 404
Route::get('/admin', function () {return view('admin');});
此目录包含应用程序的核心代码。你应用中几乎所有的类都应该放在这里
laravel 是一个 mvc 框架 m = model v = view c = controller
m 默认不提供
v 放在 resources/views
c 放在 app/http/controllers
.env 保存着 laravel 的配置 比如数据库用户名密码等 在这里面修改
artisan 运行该命令 创建 控制器 等等 …
php artisan make:controller admin 创建 admin 控制器
Route::get('/', function () {return view('welcome');});
第一个值为请求地址 , 默认第二个值为回调函数
view(welcome) 视图 resources/views 中的 welcome.blade.php
blade 为视图引擎
laravel 根据文件名判断此文件是否需要加载视图引擎
如果要转到一个类
Route::get('/admin/index',"Home@index");
使用 artisan 创建控制器
G:\phpstudy_pro\WWW\php11.edu\lv\laravel>php artisan make:controller HomeController created successfully.
在 home 控制器中创建 index 方法
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;class Home extends Controller{public function index(){return view("test");}}
在 view 视图中创建 index.blade.php 视图文件
注意一定要是一个 php 文件 这样才能调用 blade 引擎 在里面使用一些 laravel 的快捷 php 函数,后续会讲到
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>test.blade.php</title></head><body><span>这是一个test视图</span></body></html>
那么访问 /admin/index 则会显示 index.blade.php 中的内容
当然 我们也可以在 index 方法中向 test.blade.php 中传递参数
比如
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;class Home extends Controller{public function index(){// 传递第二个参数return view("test",['user'=>"PHP中文网"]);}}
视图中调用
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>test.blade.php</title></head><body><span>这是一个test视图</span>{{-- 调用数组传过来的参数--}}<p style="color: red;"><?php echo $user ?></p></body></html>

<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;class Home extends Controller{public function index(){// 传递多个参数$data['user'] = "php中文网";$data['id'] = 11110 ;return view("test",$data);}}
视图中调用
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>test.blade.php</title></head><body><span>这是一个test视图</span>{{-- 调用数组传过来的参数--}}<p style="color: red;"><?php echo $user ?></p><p style="color: red;"><?php echo $id ?></p></body></html>

打开 .env 文件
将这部分修改为自己的数据
DB_CONNECTION=mysql //数据库类型DB_HOST=127.0.0.1 // 数据库地址DB_PORT=3306 // 端口号DB_DATABASE=php11.edu // 数据库名称DB_USERNAME=php11.edu // 数据库账号DB_PASSWORD=php11.edu // 数据库密码
以下演示方法均放在 Home 类中
// 首先use DBuse \DB;
public function select(){$res = DB::select('select * from staffs');print_r($res);}
添加路由 routes/web.php
Route::get('/dbselect' , "Home@select");
访问
将数据带到视图中输出 注意这个返回的是 一维数组 里面是对象 所以要强制转换为数组
public function staff(){$res = DB::select('select * from staffs');$list = [];foreach ($res as $val){$list[] = (array)$val;}$data['list'] = $list;return view("staffs",$data);}
创建视图 resources/views/staff.blade.php
里面的@foreach 是 laravel 调用模板引擎解析文件
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>员工列表</title><link rel="stylesheet" href="layui/css/layui.css"></head><body><table class="layui-table"><thead><tr><th>id</th><th>name</th><th>age</th><th>sex</th><th>position</th><th>mobile</th><th>hiredate</th></tr></thead><tbody>@foreach($list as $val)<tr><td>{{$val['id']}}</td><td>{{$val['name']}}</td><td>{{$val['age']}}</td><!-- 男女 判断一下 --><td>{{$val['sex']?"男":"女"}}</td><td>{{$val['position']}}</td><td>{{$val['mobile']}}</td><!-- 时间戳转为日期 --><td>{{date("Y-m-d h:i:s",$val['hiredate'])}}</td></tr>@endforeach</tbody></table></body></html>
访问
public function update(){$res = DB::update('select * from staffs');var_dump($res);}
添加路由 routes/web.php
Route::get('/dbupdate' , "Home@update");
访问 返回受影响的条数
DB::insert()
返回布尔值 true 插入成功 false 插入失败
DB::delete()
返回受影响条数
public function select(){//sql = select * from staffs where id=8$res = DB::table('staffs')->where("id","8")->first();print_r($res);}
返回的是一个对象
``
public function select(){$res = DB::table('staffs')->get();print_r($res);}

返回的是集合对象 为受保护的值 无法直接调用
所以要调用 all 方法
public function select(){$res = DB::table('staffs')->get()->all();print_r($res);}

public function select(){$res = DB::table('staffs')->select("id","name")->get()->all();print_r($res);}

public function select(){$res = DB::table('staffs')->select("id as userid","name")->get()->all();print_r($res);}

public function select(){$res = DB::table('staffs')->select("id as userid","name")->where("id","7")->get()->all();print_r($res);}

public function select(){$res = DB::table('staffs')->select("id as userid","name")->where("id",">","7")->get()->all();print_r($res);}
但是不要用 对 mysql 不友好 数据过多会卡死
public function select(){$res = DB::table('staffs')->select("id as userid","name")->where("name","like","%陈%")->get()->all();print_r($res);}

也是尽量不要用 对性能有一定影响 做好做缓存
public function select(){$res = DB::table('staffs')->select("id as userid","name")->where("name","like","%陈%")->where("id","8")->get()->all();print_r($res);}

转为 sql 语句
public function select(){$res = DB::table('staffs')->select("id as userid","name")->where("name","like","%陈%")->where("id","8")->tosql();// select `id` as `userid`, `name` from `staffs` where `name` like ? and `id` = ?print_r($res);}
public function select(){$res = DB::table('staffs')->select("id as userid","name")->where("name","like","%陈%")->where("id","8")->orWhere("id","18")->get()->all();print_r($res);}

查询的时候想做 多条数据的查询
public function select(){$res = DB::table('staffs')->select("id as userid","name")->where("name","like","%陈%")->whereIn("id",[8,18,33,43])->get()->all();print_r($res);}

public function select(){$res = DB::table('staffs')->join("users","users.id","=","staffs.uid")->select('staffs.id',"users.name")->get()->all();print_r($res);}
取员工年龄的平均值
public function select(){$res = DB::table('staffs')->avg("age");print_r($res); // 51.1076// 转为整数$res = (int)$res;print_r($res); //51}
取总数
public function select(){$res = DB::table('staffs')->sum("age");print_r($res);//16150}
最小值
public function select(){$res = DB::table('staffs')->min("age");print_r($res);//23}
最大值
public function select(){$res = DB::table('staffs')->max("age");print_r($res);//99}
记录数
public function select(){$res = DB::table('staffs')->count();print_r($res);//316}
public function insert(){// 传入数组// $res = DB::table('staffs')->insert(['name'=>'daxiguai','age'=>11,'sex'=>0,'position'=>'啥进度的基督教','mobile'=>15865656565,'hiredate'=>time()]);// 多条数据 这样写$date[] = ['name'=>'daxiguai','age'=>11,'sex'=>0,'position'=>'啥进度的基督教','mobile'=>15865656565,'hiredate'=>time()];$date[] = ['name'=>'daxigssssss','age'=>11,'sex'=>0,'position'=>'啥进度55686教','mobile'=>18555888565,'hiredate'=>time()];$res = DB::table('staffs')->insert($date);var_dump($res); //返回布尔值}
public function insert2(){$date = ['name'=>'daxigssssss','age'=>11,'sex'=>0,'position'=>'啥进度55686教','mobile'=>18555888565,'hiredate'=>time()];$res = DB::table('staffs')->insertGetId($date);var_dump($res); // int(418)}
public function update(){$res = DB::table('staffs')->where('id','418')->update(["name"=>"更新测试"]);var_dump($res); // int(1) 返回受影响的行数}
public function update(){$res = DB::table('staffs')->whereIn('id',[416,417])->update(["name"=>"更新ghenxgin 试"]);var_dump($res); // int(2) 返回受影响的行数}
public function delete(){$res = db::table('staffs')->whereIn('id',[416,417])->delete();var_dump($res);// int(2) 返回受影响的行数}
G:\phpstudy_pro\WWW\php11.edu\lv\laravel>php artisan make:model StaffModel created successfully.
自动创建到了 app 目录下
一些开发者把应用的「模型」称为其所有业务逻辑的总体,而另一些人将「模型」称为与关系数据库交互的类。
而 laravel 则倾向于后者 将模型称为与关系数据库交互的类
So:
查询数据直接调用模型即可
public function select2(Staff $staff){$res = $staff->get()->ToArray();echo "<pre>";print_r($res);}
模型如果使用
all()方法返回的是一个类, 故这里要使用ToArray()方法
默认情况下 模型查询的数据表为该模型类名的复数
Staff模型 查询 staffs数据表我们可以修改他默认的关联数据表
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Staff extends Model{protected $table = "staffs";}
protected $table = "***";
***.blade.***时 将会调用 blade 引擎解析该文件 并保存到 storage/framework/views中例如 @foreach => php 中的 foreach
```php<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>员工列表</title><link rel="stylesheet" href="layui/css/layui.css"></head><body><table class="layui-table"><thead><tr><th>id</th><th>name</th><th>age</th><th>sex</th><th>position</th><th>mobile</th><th>hiredate</th></tr></thead><tbody>@foreach($list as $val)<tr><td>{{$val['id']}}</td><td>{{$val['name']}}</td><td>{{$val['age']}}</td><!-- 男女 判断一下 --><td>{{$val['sex']?"男":"女"}}</td><td>{{$val['position']}}</td><td>{{$val['mobile']}}</td><!-- 时间戳转为日期 --><td>{{date("Y-m-d h:i:s",$val['hiredate'])}}</td></tr>@endforeach</tbody></table></body></html>
这就是 laravel 的 blade 语法
@if(***<***){{ $uesr }}@else{{ $dd }}@endif
如果直接在{{}}中输入的变量值中有 html 源码 则回原样输出
这样写 {!!$user!!} 即可解决此问题
@{{}}所以我们需要用到他
需要在执行该方法之前做一个判断
中间件执行逻辑
使用 artisan 命令
G:\phpstudy_pro\WWW\php11.edu\lv\laravel>php artisan make:middleware IndexMiddleware created successfully.
源码
<?phpnamespace App\Http\Middleware;use Closure;class Index{/*** Handle an incoming request.** @param \Illuminate\Http\Request $request* @param \Closure $next* @return mixed*/public function handle($request, Closure $next){return $next($request);}}
handle此方法为固定写法, 在这里可以做一些判断Closure 闭包$requset包含了所有的请求信息
打开 app/Http/kernel.php 文件 注册中间件
第一个为 所有请求都要使用该中间件
第二个为 路由组使用
第三个为 自定义调用该中间件
注册到第三个中'index'=> \App\Http\Middleware\Index::class,
到路由中找到需要该中间件的指令后面加一个方法 middleware()Route::get('/dbselect2',"Home@select2")->middleware("index");
所有的编辑器都会有报错!不要先怀疑自己的代码有没有问题,先去运行一下,可能并没有问题,只是编辑器误报。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号