Laravelサイト開発例------6


前のブログはユーザー管理を実現し、本ブログから試合申し込みシステムを書き始めた.

試合申し込みシステム


システムせっけい
機能:1、管理者は勝手に試合を発表することができ(試合を削除する)、ユーザーは申し込みをクリックすることができて、管理者はまた一人一人に試合のアカウントを送ることができます2、観光客は申し込みを行うことができなくて、登録してやっと申し込むことができて、悪意のある申し込みを避けることができます
管理者ログインの終了
1、登録ルート
// 
$api->post('adminlogin','AdminsController@login')
    ->name('api.adminlogin.login');
// 
$api->post('adminlogout','AdminsController@logout')
    ->name('api.adminlogout.logout');

ルーティング登録が完了したら、管理者アカウントを格納するための移行ファイルを書く必要があります.
php artisan make:migration create_admins_table –create=admins
public function up()
{
    Schema::create('admins', function (Blueprint $table) {
        $table->increments('id');
        $table->string('username');
        $table->string('password');
        $table->timestamps();
    });
}

コマンドの実行、移行
php artisan migrate
モデルファイルをもう1つ書きます
php artisan make:model App\Models\Admin
namespace App\Models;
use Illuminate\Notifications\Notifiable;
use Illuminate\Database\Eloquent\Model;
class Admin extends Model
{
    //
    use Notifiable;

    protected $table = "admins";

    protected $fillable = [
       'username','password'
    ];

    protected $hidden = [
        'password',
    ];
}

最後にコントローラを再生成
php artisan make:Controller Api\AdminsController
2、書き込み制御ロジック
public function login(Request $request){
    $this->validate($request,[
       'username' => 'required',
        'password' => 'required',
    ]);
    $password = $request->password;
    $username = $request->username;
    if($request->session()->has($username)){
        return $this->response->array([
            'info' => ' ',
            'status_code'=>400,
        ])->setStatusCode(200);
    }else{
        $admin = Admin::where('username',$username)->first();
        if(md5($password)==$admin->password){
            $adminkey = $username;
            $key = 'adminlogin'.str_random(15);
            $request->session()->put($adminkey,$key);
            $request->session()->put($key,$adminkey);
            return $this->response->array([
                'key' => $key,
                'info' => ' ',
                'status_code' => 200,
            ])->setStatusCode(200);
        }
    }
}
public function logout(Request $request){
    $this->validate($request,[
       'verification_key' => 'required',
    ]);
    $key = $request->verification_key;
    $admin = $request->session()->get($key);
    $request->session()->forget($key);
    $request->session()->forget($admin);
    return $this->response->array([
        'info' => ' ',
        'status_code' => 200,
    ])->setStatusCode(200);
}

3、テスト登録成功
{
    "key": "adminloginyF5TuBjYpG1vyAl",
    "info": " ",
    "status_code": 200
}

ログイン失敗
{
    "info": " ",
    "status_code": 400
}
///////
{
    "info": " ",
    "status_code": 200
}

登録成功
{
    "info": " ",
    "status_code": 200
}

管理者が試合を管理する
試合の管理には、試合情報の追加、削除、修正、照会が含まれます.試合情報:試合のフルネーム、責任者の名前、責任者の電話番号、試合時間、試合場所、組織単位、試合ルールの詳細、申し込み人数、最新公告、試合結果表id、申し込み表id、試合状態(まだ応募できるかどうか)ルート
// 
$api->post('creategame','GamesController@create')
    ->name('api.creategame.create');
$api->post('deletegame','GamesController@delete')
    ->name('api.deletegame.delete');
$api->get('showgames','GamesController@show')
    ->name('api.showgames,show');
$api->post('udpategame','GamesController@update')
    ->name('api.updategame.update');

データベースの移行と永続化モデルの作成
php artisan make:migration create_games_table –create=games
public function up()
    {
        Schema::create('games', function (Blueprint $table) {
            $table->increments('id');
            $table->string('gamename');
            $table->string('fuzeren');
            $table->string('fuzerenphone');
            $table->dateTime('gametime');
            $table->text('address');
            $table->string('origanizetion');
            $table->text('guize');
            $table->integer('number');
            $table->text('news');
            $table->integer('resultid');
            $table->integer('baomingid');
            $table->integer('gamestatus');
            $table->timestamps();
        });
    }

php artisan migrate
php artisan make:model App\Models\Game
namespace App\Models;

use Illuminate\Notifications\Notifiable;
use Illuminate\Database\Eloquent\Model;

class Game extends Model
{
    use Notifiable;

    protected $table = "games";

    protected $fillable = [
        'gamename','fuzeren','fuzerenphone','gametime','address','origanizetion','guize','number','news','resultid','baomingid','gamestatus',    ];

    protected $hidden = [
        'fuzeren','fuzerenphone',
    ];
}

コンテスト管理コントローラの作成
php artisan make:Controller Api\GamesController
新しいゲームを作成するには、テーブル、エントリーシートを関連付ける必要があります.そのため、エントリーシートの最新情報をデータベースで記録する必要があります.
public function create(Request $request){
  $this->validate($request,[
     'key' => 'required',
  ]);
  $key = $request->key;
  if($request->session()->has($key)){
      $game = Game::create([
          'gamename' => $request->gamename,
          'fuzeren' => $request->fuzeren,
          'fuzerenphone' => $request->fuzerenphone,
          'gametime' => $request->gametime,
          'address' => $request->address,
          'origanizetion' => $request->origanizetion,
          'guize' => $request->guize,
          'number' => 0,
          'news' => $request->news,
          'gamestatus' => 0,
      ]);
      $baoming = Baoming::where('id',1)->first();
      $game->baomingid = $baoming->number;
      $game->save();
      $baoming->number = $baoming->number+1;
      $baoming->save();
      return $this->response->array([
          'info' => ' ',
          'status_code' => 200,
      ])->setStatusCode(201);
  }else{
      return $this->response->array([
          'info' => ' ',
          'status_code' => 400,
      ])->setStatusCode(200);
  }
}

現在はまず試合作成機能を実現し、後続の管理機能を追加する.
{
    "info": " ",
    "status_code": 200
}

データベースからも関連データが表示されます.
次のユーザーの申し込み