发现一个配置上的问题:解决除了’/'以外的其他路由都不生效
nginx没有开启rewrite功能,所以nginx识别不了路由。因为nginx是在Laravel底层的,所以必须得先满足nginx才能满足php。
在配置文件中加入:
set $root_path 'C:\Users\laodiao\Downloads\www\nginx-1.15.1\html\acm\public';
root $root_path;
index index.php index.html index.htm;
try_files $uri $uri/ @rewrite;
location @rewrite {
rewrite ^/(.*)$ /index.php?_url=/$1;
}
//修改下面的配置文件为这种
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
root html/acm/public;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index /index.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
重启nginx服务
接口开发
需求文档描述
在进行实际的开发之前,首先得弄明白实现的系统有哪些功能
我要做的是一个协会网站,设计的功能有如下几个
1、用户管理系统
2、协会新闻系统
3、学习资源分享系统
4、竞赛报名和管理员后台管理系统
用户管理系统api研发
连接数据库设置,到.env文件中修改连接到mysql数据库的配置
DB_DATABASE=acm
DB_USERNAME=zhangliao
DB_PASSWORD=zhangLiao2018
到 database/migrations 中编写用户表数据库迁移
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->bigInteger('schoolid');
$table->string('email')->unique();
$table->string('password');
$table->integer('sex');
$table->text('xueyuan');
$table->text('zhuanye');
$table->integer('shifouhuiyuan');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
然后使用 php artisan migrate 来进行迁移(即创建数据表),创建好新的数据库之后,有个 migrations 数据表是用于记录迁移过程的。使用 php artisan migrate:rollback 来回滚刚才的操作迁移。创建好数据库之后,需要做对象持久化操作。即用模型对应数据表的方法来对数据字段进行处理。
laravel的模型文件是放在 app/ 目录下的,默认生成了一个User.php的模型文件。新建一个Models的目录,并将User.php放到里面去.编辑器全局搜索 App\User 替换为 App\Models\User 。
mkdir app\Models
mv app\User.php app\Models\User.php
根据需求,改成
class User extends Authenticatable
{
use Notifiable;
protected $table = "users";
protected $fillable = [
'name','schoolid', 'email', 'password','sex','xueyuan','zhuanye','shifouhuiyuan',
];
protected $hidden = [
'password', 'remember_token',
];
}
利用 tinker 工具创建用户对象
php artisan tinker
App\Models\User::create(['name'=> 'chaojilaji','schoolid'=> '2015212018', 'email'=>'3328118489@qq.com','password'=>bcrypt('123123'),'sex'=> '1','xueyuan'=> 'cs','zhuanye'=> 'cs','shifouhuiyuan'=> '1'])
//创建成功,结果如下:
App\Models\User {#2903
name: "chaojilaji",
schoolid: "2015212018",
email: "3328118489@qq.com",
sex: "1",
xueyuan: "cs",
zhuanye: "cs",
shifouhuiyuan: "1",
updated_at: "2018-07-25 09:19:57",
created_at: "2018-07-25 09:19:57",
id: 1,
}
现在数据库中有数据了,研发接口开始了
实现资源控制器来获取用户输入和返回信息的接口(没有实际意义,demo)
使用命令创建一个资源控制器
php artisan make:controller UsersController --resource
生成资源控制器针对的是rest ful模式,会生成以下几个方法
index
create
store
show
edit
update
destroy
然后为资源控制器定义一个路由
Route::group(['prefix' => 'demo'], function(){
Route::resource('users', 'UsersController');
});
//定义了一个路由组,以api为前缀
然后实现了资源控制器中的store方法
public function store(Request $request)
{
//
$rs['name'] = $request->input('name');
$rs['schoolid'] = $request->input('schoolid');
$rs['email'] = $request->input('email');
$rs['password'] = $request->input('password');
$rs['sex'] = $request->input('sex');
$rs['xueyuan'] = $request->input('xueyuan');
$rs['zhuanye'] = $request->input('zhuanye');
$rs['shifouhuiyuan'] = $request->input('shifouhuiyuan');
$rs['info'] = '请求成功';
return response($rs,'200');
}
资源控制器处理的动作
方法
| 路径
| 动作
| 路由名称
|
get
| /users
| index
| users.index
|
get
| /users/create
| create
| users.create
|
post
| /users
| store
| users.store
|
get
| /users/{id}
| show
| users.show
|
get
| /users/{id}/edit
| edit
| users.edit
|
put/patch
| /users/{id}
| update
| users.update
|
delete
| /users/{id}
| destory
| users.destory
|
使用postman对接口进行测试
注意:使用postman对接口进行测试的时候,如果使用post方法,默认会有csrf防护,所以应该关掉csrf防护。
{
"name": "chaojilaji1",
"schoolid": "2015211795",
"email": "33281184891@qq.com",
"password": "123456",
"sex": "0",
"xueyuan": "cs",
"zhuanye": "cs",
"shifouhuiyuan": "1",
"info": "请求成功"
}
测试成功的话,返回的结果如上
安装dingoapi扩展
1、下载dingo/api
composer require dingo/api:2.0.0-alpha2
2、先将 dingo 的配置文件 publish 出来
php artisan vendor:publish
Which provider or tag's files would you like to publish?:
[0] Publish files from all providers and tags listed below
[1] Provider: Dingo\Api\Provider\LaravelServiceProvider
[2] Provider: Fideloper\Proxy\TrustedProxyServiceProvider
[3] Provider: Illuminate\Mail\MailServiceProvider
[4] Provider: Illuminate\Notifications\NotificationServiceProvider
[5] Provider: Illuminate\Pagination\PaginationServiceProvider
[6] Provider: Laravel\Tinker\TinkerServiceProvider
[7] Tag: laravel-mail
[8] Tag: laravel-notifications
[9] Tag: laravel-pagination
> 1
Copied File [\vendor\dingo\api\config\api.php] To [\config\api.php]
Publishing complete.
打开 .env 文件,加入这五条语句
.
.
.
API_STANDARDS_TREE=prs
API_SUBTYPE=larabbs
API_PREFIX=api
API_VERSION=v1
API_DEBUG=true
然后在config/app.php中注册服务提供者到providers
Dingo\Api\Provider\LaravelServiceProvider::class
测试dingo的安装情况
来到routes/api.php中,修改默认的路由为:
$api = app('Dingo\Api\Routing\Router');
$api->version('v1', function($api) {
$api->get('version', function() {
$ans['info'] = 'v1';
$ans['code'] = 200;
return response($ans);
});
// $api->resources('users', 'UsersController');
});
$api->version('v2', function($api) {
$api->get('version', function() {
return response('this is version v2');
});
});
使用get的方法对这两个api进行测试
结果如下:
{
"info": "v1",
"code": 200
}