Laravel 基础,路由,控制器、视图、模型

18 篇文章 0 订阅

1. 核心目录文件介绍;

在这里插入图片描述

  • app:包含了应用程序的核心代码(核心代码指的是自己写的代码)。业务逻辑主要写在 app/Http 里。里面包含了 MVC 中的 C,也叫 Controllers。也就是以后书写 Controllers 的地方

  • bootstrap:包含框架启动和自动加载配置的文件。里面有一个 bootstrap/app.php 文件加载配置

  • config:包含所有应用程序的配置文件,比如缓存 config/cache.php、数据库 config/database.php、队列 config/queue.php、视图 config/view.php

  • database:包含数据库迁移与填充文件

  • public:包含了入口 index.php 以及项目的静态资源文件(js、css、图片资源等)

  • resource:包含了视图以及原始的资源文件。resource/views,也就是 MVC 中的 V,视图都要写在这里

  • routes:包含路由文件:routes/web.phproutes/api.php

  • storage:包含了编译后的模板文件、以及基于文件的 SESSION、文件缓存、日志等

  • tests:单元测试目录。放的是测试代码

  • vendor:包含 composer 加载的依赖模块

2. 路由和 MVC;

2.1 路由;

2.11 路由简介;

  • Laravel 框架中的 MVC 不同与传统的 MVC,传统 MVC 请求直接对应控制器,但是 Laravel 中的请求对应路由
  • Laravel 中的路由简单的来说就是将用户的请求转发给相应的程序进行处理
  • 作用就是建立 URL 和程序之间的映射(这里的程序指的是 处理函数)。优点就是灵活的修改 URL,而不需要对程序进行修改
  • 请求类型:get、post、put、patch、delete

2.12 基本路由;

  • Laravel 5.3 之前,路由文件的路径是 app/Http/routes.php。之后 app/Http/routes.php 文件被移动到 routes 目录下,并且被分割成两个文件:routes/web.phproutes/api.php。web.php 中的路由应用了 web 中间件组,而 api.php 中的路由应用了 api 中间件组。
  • 打开 routes/web.php
<?php
# 1. get 路由:routes/web.php 写入
Route::get('basic1', function(){
	return 'Hello world';
});
# 浏览器访问 http://192.168.1.214:2000/basic1,返回 Hello world

# 2. post 路由:routes/web.php 写入
Route::post('basic2', function(){
	return 'basic2';
});
# 由于 post 请求浏览器无法直接访问,所以在 Postman 里演示,返回 basic2

2.13 多请求路由;

<?php
# 多请求路由方法 1:routes/web.php 写入
Route::match(['get','post'], 'multi1', function(){
	return 'multi1';
});
# 注册指定响应类型请求
# 访问 http://192.168.1.214:2000/multi1,返回 multi1

# 多请求路由方法 2:routes/web.php 写入
Route::any('multi2', function(){
	return 'multi2';
});
# 注册路由响应所有类型请求
# 访问 http://192.168.1.214:2000/multi2,返回 multi2

2.14 路由参数;

  • 使用路由参数可以获得请求路由的 URL 区段
<?php
# routes/web.php 写入
Route::get('user/{id}', function($id){
	return 'user_'.$id;
});
# 
# 访问 http://192.168.1.214:2000/user/1,返回 user_1

# routes/web.php 写入
Route::get('user/{name?}', function($name = 'name'){
	return 'user_'.$name;
});
# 可选参数
# 访问 http://192.168.1.214:2000/user,返回 user_name
# 访问 http://192.168.1.214:2000/user/tom,返回 user_tom

# 还可以用正则表达式去限制参数
# routes/web.php 写入
Route::get('user/{name?}', function($name = 'name'){
	return 'user_'.$name;
})->where('name','[A-Za-z]+');
# 访问 http://192.168.1.214:2000/user/tom_jerry,返回 404 Not Found,不符合正则规则

# 如果有多个字段验证
# routes/web.php 写入
Route::get('user/{id}/{name?}', function($id, $name = 'name'){
	return 'user-id-'.$id.'-name-'. $name;
})->where([
	'id'	=> '[0-9]+',
	'name' 	=> '[A-Za-z]+'
]);
# 访问 http://192.168.1.214:2000/user/1/tom,返回 user-id-1-name-tom

2.15 路由别名;

<?php
# routes/web.php 写入
Route::get('user/member-center', ['as' => 'center', function(){
    return 'member-center';
}]);
# 访问 http://192.168.1.214:2000/user/member-center,返回 member-center
# 既然和以前一样,那为什么要取别名?
# 别名的优点就是在控制器、路由、模板中用 route 函数生成别名对应的 URL
Route::get('user/member-center', ['as' => 'center', function(){
    // return 'member-center';
    return route('center');
}]);
# 访问 http://192.168.1.214:2000/user/member-center,
# 返回 http://192.168.1.214:2000/user/member-center
# 如果修改了 URL,模板里对应的代码就不需要修改

2.16 路由群组;

  • 很多路由会有公共的需求,比如 URL 区段、中间件、命名空间、前缀等。可以用路由群组套用属性到多个路由、而不是每个路由都要设置。
<?php
# routes/web.php 写入
Route::group(['prefix' => 'member'], function(){
	Route::get('user/center', ['as' => 'center', function(){
	    return route('center');
	}]);
	
	Route::any('multi2', function(){
		return 'member-multi2';
	});

});
# 访问 http://192.168.1.214:2000/member/user/center
# 返回 http://192.168.1.214:2000/member/user/center

# 访问 http://192.168.1.214:2000/member/multi2 返回:member-multi2

2.17 路由中输出视图;

<?php
# routes/web.php 写入
Route::get('view', function(){
	return view('welcome');
});
# 对应 resource/welcome.blade.php 模板
# 访问 http://192.168.1.214:2000/view 成功输出以上模板内容

2.2 控制器;

  • Laravel 中路由只是用来接收请求,并转发给控制器的方法进行处理

2.21 新建控制器;

  • 新建控制器 app/Http/Controllers/MemberController.php
<?php

namespace App\Http\Controllers;

class MemberController extends Controller{
	
	public function info(){
		return 'member-info';
	}
	
}

2.22 控制器和路由关联 ;

  • 需要和路由关联才能访问这个控制器
  • 修改 routes/web.php
<?php
Route::get('member/info', 'MemberController@info');
# 或者
Route::match(['get'], 'member/info', ['uses' => 'MemberController@info']);
# 访问:http://192.168.1.214:2000/member/info 返回 member-info

# 5.2 之前有一个方法可以直接绑定控制器,现在已经废弃
# Route::controller('member', 'MemberController');

2.23 关联控制器后,路由的特性如何使用;

  • 关于路由取别名的特性
<?php
# 修改 `routes/web.php`
Route::get('member/info', [
	'uses' 	=> 'MemberController@info',
	'as'	=> 'memberinfo'
]);

# 修改控制器 `app/Http/Controllers/MemberController.php` 
namespace App\Http\Controllers;

class MemberController extends Controller{
	
	public function info(){
		return route('memberinfo');
	}
	
}

# 访问 http://192.168.1.214:2000/member/info
# 返回 http://192.168.1.214:2000/member/info
  • 关于参数绑定的特性
<?php
# 修改 `routes/web.php`
Route::get('member/{id}', [
	'uses' => 'MemberController@info'
]) -> where('id','[0-9]+');

# 修改控制器 `app/Http/Controllers/MemberController.php` 
namespace App\Http\Controllers;

class MemberController extends Controller{
	
	public function info($id){
		return 'member-info-id-' . $id;
	}
	
}

# 访问 http://192.168.1.214:2000/member/1,返回 member-info-id-1

2.3 视图;

2.3.1 新建视图;

# 1. 新建视图 `resources/views/member-info.php`
# Laravel 的模板支持原生的 PHP
# 写入如下内容
member-info php
# 接下去看 2.3.2 中的 1. 输出视图

# 一般情况下会一个控制器对应一个视图模板目录
# 所以 resources/views/member/ 目录对应 app/Http/Controllers/MemberController.php

# 2. 新建 Laravel 默认模板视图 `resources/views/member/info.blade.php`
# 写入如下内容
# 注意:视图输出变量用“{{$a}}”
member/info blade

{{$name}}
{{$age}}

# 接下去看 2.3.2 中的 2. 输出默认模板视图

2.3.2 输出视图;

<?php
# 1. 输出视图
# 修改控制器 `app/Http/Controllers/MemberController.php` 
namespace App\Http\Controllers;

class MemberController extends Controller{
	
	public function info($id){
		return view('member-info');
	}
	
}
# 访问 http://192.168.1.214:2000/member/1,返回模板的内容 member-info php

# 2. 输出默认模板视图
# 修改控制器 `app/Http/Controllers/MemberController.php` 
namespace App\Http\Controllers;

class MemberController extends Controller{
	
	public function info($id){
		// 模板可以接收变量
		return view('member/info', [
			'name' 	=> 'Tom',	
			'age'	=> '30' 
		]);
	}
	
}
# 访问 http://192.168.1.214:2000/member/1,
# 返回模板的内容:member/info blade Tom 30

2.4 模型;

2.4.1 新建模型;

  • 模型(Model) 路径在 app 下,app/User.php 就是示例文件
  • 新建模型 app/Member.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Member extends Model{
	
	public static function getMember(){
		return 'member is Tom';
	}
	
}

2.4.2 使用模型。

  • 修改控制器 app/Http/Controllers/MemberController.php
<?php

namespace App\Http\Controllers;

use App\Member;	// 引用

class MemberController extends Controller{
	
	public function info($id){
        return Member::getMember();
	}
	
}

访问 http://192.168.1.214:2000/member/1,返回 member is Tom
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值