laravel开发网站实例-----2

发现一个配置上的问题:解决除了’/’以外的其他路由都不生效

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'=>'[email protected]','password'=>bcrypt('123123'),'sex'=> '1','xueyuan'=> 'cs','zhuanye'=> 'cs','shifouhuiyuan'=> '1'])
//创建成功,结果如下:
App\Models\User {#2903
     name: "chaojilaji",
     schoolid: "2015212018",
     email: "[email protected]",
     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": "[email protected]",
    "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
}

猜你喜欢

转载自blog.csdn.net/xielinrui123/article/details/81218773