getRouteBase();
$r->addGroup($base, function (FastRoute\RouteCollector $r) use($base)
{
// User
$r->get ('/users', 'UserController@index');
$r->get ('/user/create', 'UserController@create');
$r->post('/user/insert', 'UserController@insert');
$r->get ('/user/{id:\d+}/edit', 'UserController@edit');
$r->post('/user/{id:\d+}/update', 'UserController@update');
$r->post('/user/{id:\d+}/delete', 'UserController@delete');
// Home
$r->get ('/home', 'HomeController@index');
$r->get('/', function() use($base){
header("Location: " . $base.'/home');
});
// Stub
$r->get('/stub[/{no:\d+}]', 'StubController@index');
});
};
* /users --- ユーザ一覧画面
* /user/create --- ユーザ新規登録画面
* /user/insert--- ユーザレコード挿入
* /user/{id:\d+}/edit --- ユーザ編集画面
* /user/{id:\d+}/update --- ユーザレコード更新
* /user/user/{id:\d+}/delete --- ユーザレコード削除
ルーティング設定に関しては[[https://github.com/nikic/FastRoute|FastRoute]]を参照して下さい。
\\
===== ユーザモデル =====
Model を継承してユーザモデルを作ります。
モデルのクラス名は命名規則に従いテーブル名(user)を UpperCamelCase にした User になります。ユーザ一覧画面では特にUserクラスで実装するメソッドはなく全て[[apricot:app:db-model#モデルクラス|Modelクラス]]のメソッドを使用します。
{{fa>folder-open-o}} ** /apricot/app/Model **
\\
===== ユーザコントローラ =====
Controller を継承してユーザコントローラ( UserController )を作ります。
{{fa>folder-open-o}} ** /apricot/app/Controllers **
user = new User();
}
/**
* ユーザ一覧
* @return \Core\Foundation\Response
*/
public function index()
{
// 全件検索
$users = $this->user->findAll();
return render("user.index", ["users"=>$users]);
}
/**
* ユーザ新規登録
* @return \Core\Foundation\Response
*/
public function create()
{
// Stub
$title = 'ユーザ新規登録';
$messages[] = "This is Stub.";
return render('stub',['title'=>$title,'messages'=>$messages]);
}
/**
* ユーザ編集
* @return \Core\Foundation\Response
*/
public function edit(int $id)
{
// Stub
$title = 'ユーザ編集';
$messages[] = "This is Stub.";
return render('stub',['title'=>$title,'messages'=>$messages]);
}
}
* **index()** : ユーザ一覧
* ボイラープレートのrender()関数を呼び出してレスポンスをレンダリングしています
* **render(string $view=null, array $variables=[])**
- $view : テンプレート名\\ 上例では assets/views/user/index.blade.php がテンプレートファイルになります
- $variables : テンプレート変数の連想配列\\ 上例では検索結果( $users )をテンプレートに渡しています。
* **create()** : ユーザ新規登録
* **edit()** : ユーザ編集
* スタブを実装しています (次章の[[apricot:app:user-edit|ユーザ編集画面]]で実装します)
\\
===== HTMLテンプレート =====
以下にユーザコントローラのindexアクションでレンダリングしているHTMLテンプレートを示します。
{{fa>folder-open-o}} ** /apricot/assets/views/user **
{{-- 親レイアウト --}}
@extends('layout')
{{-- 追加スクリプト --}}
@push('scripts')
@endpush
{{-- タイトル --}}
@section('title', __('messages.user.index.title'))
{{-- コンテンツ --}}
@section('content')
{{__('messages.user.index.id')}}
{{__('messages.user.index.account')}}
{{__('messages.user.index.email')}}
{{__('messages.user.index.created_at')}}
@foreach($users as $user)
id}/edit")}}">
{{ $user->id }}
{{ $user->account }}
{{ $user->email }}
{{ ViewHelper::formatDatetime($user->created_at) }}
@endforeach
@endsection
* ''extends'', ''push'', ''section'' の各ディレクティブについては、[[apricot:app:top#htmlテンプレート|スタブ画面]] を参照して下さい。
* ボイラープレート''__ ()'', '' route()'' については、[[apricot:app:top#layoutbladephp|layout.blade.php]] を参照して下さい。
* **ユーザ一覧表示**
* テンプレート変数 ''$users'' を使いユーザ一覧を表示しています。
* ''@foreach'' はPHPの foreach と同じ機能を有するディレクティブです。
* ''ViewHelper::formatDatetime'' は日時のフォーマットを行うアプリの[[apricot:app:top#ヘルパークラス|ヘルパー関数です]]。
HTMLテンプレートに関しては本編[[http://www.y2sunlight.com/ground/doku.php?id=basic-library:bladeone:3.37|BladeOne]]のリンクを項を参照して下さい。
\\
===== ホーム画面の変更 =====
Apricotのメニューからユーザ一覧画面を表示するために、layout.blade.php を以下のように変更します。
{{fa>folder-open-o}} ** /apricot/assets/view **
...
* Menu1のリンクを ''route('stub/1')'' から ''route('users')'' に変更します。
\\
===== 翻訳テキスト =====
翻訳ファイル( messages.php )を以下のように変更します。
{{fa>folder-open-o}} ** apricot/assets/lang/ja **
...
[
'title'=>env('APP_NAME'),
'menu'=>[
'menu1'=>'Users',
'menu2'=>'Menu2',
'menu3'=>'Menu3',
'logout'=>'Logout',
'about_me'=>'About Me',
],
],
...
'user'=>[
'index'=> [
'title'=>'ユーザ一覧',
'id'=>'ID',
'account'=>'アカウント',
'email'=>'メールアドレス',
'note'=>'備考',
'created_at'=>'登録日',
'btn_new'=>'新規',
],
],
];
* メニュー項目表示 ''app.menu.menu1'' の値を 'Menu1' から 'Users' に変更します。
* ユーザ一覧画面用の翻訳テキストを ''user.index'' に追加します。
\\
===== テスト実行 =====
ユーザ一覧画面を表示してみましょう。ブラウザ上で以下のURLにアクセスしてみて下さい。
http://localhost/ws2019/apricot/public/
[{{apricot:app:app02.png?nolink}}]
■ [Users]メニューをクリックすると次の画面が表示されます
[{{apricot:app:app05.png?nolink}}]
■ [新規]ボタンを押すとユーザ新規登録画面のスタブが表示されます\\
■ リスト内のユーザをクリックするとユーザ編集画面のスタブが表示されます
\\