Laravel路由、控制器、模型、视图

一、路由相关

-> 基础路由设置
Route::get('/', function () {
    return view('welcome');
});

// Route::get('hello', function () {
//     return 'hello';
// });

Route::get('hello', 'Admin\IndexController@index');

Route::match(['get','post'],'match',function () {
	return 'get&post请求';
});

Route::any('any',function () {
	return 'any请求';
});
-> 路由参数
//三个参数,sex参数可不写,id和name参数有一定规则
Route::get('hello/{id}/{name}/{sex?}', function ($id,$name,$sex='男') {
    return "id={$id}/name={$name}/sex={$sex}";
})->where(['id'=>'^\d+$', 'name'=>'^[a-zA-Z]+$']);
-> 路由分组
// 路由分组
Route::group(['prefix'=>'admin','namespace'=>'Admin'], function () {
	Route::get('login', 'LoginController@login');
	Route::get('user/index', 'UserController@user');

	// 中间件
	Route::group(['middleware' => 'checkuser'], function () {
		// 定义路由...
	});
	
});

// 引入自定义路由文件
include base_path('routes/admin/admin.php');

二、控制器

-> 目录结构及创建控制器


cmd进入项目根目录执行:

php artisan make:controller 控制器类名称

一般对控制器进行分模块管理
定义位置改为:app/Http/Controllers/模块目录/控制器文件名
cmd进入项目根目录执行:

php artisan make:controller Admin/IndexController
-> request接收参数&路由参数的绑定

注意:如果方法中出现多个形参,Request $request只能放在第一个位置。

路由规则:

Route::get('index/index/{id}/{name}', 'IndexController@index');


①获取请求参数 (all方法、input方法)
Request类提供了很多方法,用于接收请求参数。

//all方法以数组方式获取全部参数
$params = $request->all();
//input方法获取单个参数
$name = $request->input('name');
//only方法获取部分参数(获取指定的参数)
$params = $request->only(['name', 'email']);
$params = $request->only('name', 'email');
//except方法获取部分参数(获取除了指定参数外的其他参数)
$params = $request->except(['sex', 'age']);
$params = $request->except('sex', 'age');
//has方法判断是否有指定参数(返回布尔值)
if($request->has('id')){}

②获取请求方式

//method方法获取请求方式
$method = $request->method();
//isMethod方法判断请求方式
if($request->isMethod('post')){}

③获取请求路径

//path方法 路由部分
$path = $request->path();
//url方法 域名+路由部分
$url = $request->url();
//fullurl方法  域名+路由部分+查询字符串
$fullurl = $request->fullurl();

三、Laravel框架中的模型

-> 定义位置

定义模型的位置,默认是在app目录下面,但是为了管理方便,可以定义在app/Http/Models目录下。

-> 命名规则

框架默认规则:数据表名是模型类名的复数形式,即数据表名采用复数形式,模型名称采用单数形式。

注意:如果不遵循此规则,需要在模型中使用$table属性指定表名

-> 创建模型类

可以使用artisan命令;
默认情况下,模型直接放在app目录:

[project] > php artisan make:model  Member

如果模型放在app/Http/Models目录下,则执行:

[project] > php artisan make:model  Http/Models/Manager

Manager模型引入父类:

use Illuminate\Database\Eloquent\Model;

真实位置在:
vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php

-> 定义模型注意事项

创建好的model模型类要继承:Illuminate\Database\Eloquent\Model
每个模型类里边一般可以声明以下成员:

protected $table = 数据表名称;
protected $primaryKey = 主键字段;
public $timestamps = 自动添加时间字段[布尔值];
protected $fillable = 数据填充时允许操作的字段[数组];

第一:定义一个$table属性,值是不要前缀的表名,如果不指定$table则默认使用类名的复数形式作为表名。
第二:定义$primaryKey属性,值是主键名称,如果不设置主键,默认使用id字段作为主键。
第三:定义$timestamps属性,值是布尔值,代表是否自动添加时间字段。
①框架默认会操作表中的created_atupdated_atdeleted_at时间字段(添加时间、修改时间、软删除时间),如果设置为false,表示不要操作这些字段。
②如果实际字段名称不是created_at等默认名称,则通过以下方式指定:

// 定义类常量
const CREATED_AT = 'create_time';
const UPDATED_AT = 'update_time';
const DELETED_AT = 'delete_time';

③时间字段格式,默认为日期时间格式Y-m-d H:i:s,可以通过以下方式修改:

protected $dateFormate = 'Y-m-d';
// 或
protected $dateFormate = 'U';//U 表示Unix时间戳格式

第四:定义$fillable属性,表示允许添加或修改到数据库的字段信息。
①主键和时间字段不需要设置;后续使用模型的create方法添加数据时,必须定义$fillable

$fillable属性相当于白名单,也可以设置$guarded属性,排除入库的字段,相当于黑名单。

protected $guarded = ['price','number'];

但是$fillable$guarded属性不能同时使用。

四、视图

-> 模板的定义

常用定义规则:/resources/views/模块名目录/控制器名目录/模板文件名+模板后缀
框架内置了blade模板引擎,默认视图文件后缀是.blade.php

-> 模板渲染及赋值

在控制器方法中,进行模板渲染和模板赋值:

return view(模板名称, 变量数组);
// 或
return view(模板名称)->with(变量数组);
// 或
return view(模板名称)->with(变量名1,变量值1)->with(变量名2,变量值2);

对模板进行分模块管理后,这里的模板名称,需要包含resources/views/目录下的子目录名,分隔符可以为/或者.
语法示例:

return view('admin.index.index', ['id' => 1, 'name' => 'hsz']);
// 或
return view('admin.index.index')->with('id', 1)->with('name', 'hsz');
-> compact函数


-> 模板中变量输出

{{变量}}原样输出
{!!变量!!}解析html输出

-> 内置标签if和foreach

blade模板引擎内置了过程控制语法标签,常用的有if标签和foreach标签
①if标签 进行条件判断
双分支

@if(...)
...
@else
...
@endif

多分支

@if()
@elseif()
@elseif()
@else
@endif

②foreach标签 遍历数组或对象

@foreach($data as $v)
		{{$v[‘id’]}} ---- {{$v[‘name’]}} <br/>
@endforeach

猜你喜欢

转载自blog.csdn.net/csdn_heshangzhou/article/details/83034193