-
Notifications
You must be signed in to change notification settings - Fork 6
SamplesPlugin.php
オープンソース・ワークショップ 永原 篤 edited this page Mar 11, 2022
·
18 revisions
以下、部分ごとに解説します。
namespace App\PluginsOption\User\Samples;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Validator;
use App\Models\Common\Buckets;
use App\Models\Common\Frame;
use App\ModelsOption\User\Samples\Sample;
use App\ModelsOption\User\Samples\SamplePost;
use App\PluginsOption\User\UserPluginOptionBase;
- namespace はディレクトリと合わせて定義
- Illuminate\Support\Collection アクションメソッドの戻り値に使用します。
- Illuminate\Support\Facades\Validator 入力エラー定義に使用します。
- App\Models\Common\Buckets 共通バケツ
- App\Models\Common\Frame フレーム
- App\ModelsOption\User\Samples\Sample サンプルプラグインのバケツ
- App\ModelsOption\User\Samples\SamplePost サンプルプラグインの記事
- App\PluginsOption\User\UserPluginOptionBase オプションプラグインを開発する場合の継承元
class SamplesPlugin extends UserPluginOptionBase
{
/**
* 変更時のPOSTデータ
*/
public $post = null;
- クラス定義と継承指定
- $post は記事が指定されたときのための変数
/**
* 関数定義(コアから呼び出す)
*/
public function getPublicFunctions()
{
// 標準関数以外で画面などから呼ばれる関数の定義
$functions = array();
$functions['get'] = ['index'];
return $functions;
}
- 標準関数は config\cc_role.php の CC_METHOD_AUTHORITY と CC_METHOD_REQUEST_METHOD で定義されています。
- 標準関数にないものは、ここで定義することで、画面から呼ばれて実行可能になります。
/**
* 権限定義
*/
public function declareRole()
{
// 権限チェックテーブル
$role_check_table = array();
return $role_check_table;
}
- 標準関数以外の関数を定義する場合は、ここで関数ごとの許可する権限を定義します。
- このサンプルプラグインでは、標準関数以外はありませんが、指定する場合は以下のように指定します。
$role_check_table['remote'] = array('role_article');
/**
* プラグインのバケツ取得関数
*/
private function getPluginBucket($bucket_id)
{
// プラグインのメインデータを取得する。
return Sample::firstOrNew(['bucket_id' => $bucket_id]);
}
- プラグインのバケツ取得。自クラス内でのみ使用するため private 指定します。
/**
* POST取得関数(コアから呼び出す)
* コアがPOSTチェックの際に呼び出す関数
*/
public function getPost($id, $action = null)
{
if (is_null($action)) {
// プラグイン内からの呼び出しを想定。処理を通す。
} elseif (in_array($action, ['index', 'save', 'delete'])) {
// コアから呼び出し。posts.update|posts.deleteの権限チェックを指定したアクションは、処理を通す。
} else {
// それ以外のアクションは null で返す。
return null;
}
// 一度読んでいれば、そのPOSTを再利用する。
if (!empty($this->post)) {
return $this->post;
}
// 指定された記事を取得
$this->post = SamplePost::firstOrNew(['id' => $id]);
return $this->post;
}
- 記事データを取得する関数。コアからも呼ばれるために、public 指定します。
- インスタンス変数 $this->post にして、シングルトンにしているのは、処理速度を向上させるためです。
/**
* データ初期表示関数
* コアがページ表示の際に呼び出す関数
*
* @method_title 記事編集
* @method_desc 記事一覧を表示します。
* @method_detail
*/
public function index($request, $page_id, $frame_id, $post_id = null)
{
// バケツ未設定の場合はバケツ空テンプレートを呼び出す
if (!isset($this->frame) || !$this->frame->bucket_id) {
// バケツ空テンプレートを呼び出す。
return $this->view('empty_bucket');
}
// バケツデータ取得
$sample = $this->getPluginBucket($this->buckets->id);
// 記事一覧
$posts = SamplePost::where('sample_id', $sample->id)
->orderBy('id', 'desc')
->paginate(20, ["*"], "frame_{$frame_id}_page");
// 表示テンプレートを呼び出す。
return $this->view('index', [
'sample' => $sample,
'posts' => $posts,
]);
}
- index 関数は、画面が開いた際にコアが最初に呼び出す関数です。
- バケツの存在チェック、バケツデータ、記事一覧を取得して画面に渡します。
- 記事一覧の取得は、新しいもの順、ページング処理のために20件ずつの指定をしています。
- 画面テンプレートは $this->view 関数で呼び出します。(Laravel 標準は view 関数。ここでは、$this->view)
- 画面テンプレート名は index、$sample と $posts 変数を画面に渡します。
/**
* 記事編集画面
*
* @method_title 記事編集
* @method_desc 記事を編集します。
* @method_detail 記事の削除もこの画面から行います。
*/
public function edit($request, $page_id, $frame_id, $post_id = null)
{
// 記事取得
$post = $this->getPost($post_id);
// 編集画面を呼び出す。
return $this->view('edit', [
'post' => $post,
]);
}
- 記事1件を取得して、編集画面に渡す。
- 新規登録の場合は、記事は取得できずに空を渡す。
/**
* POST コンテンツを登録する。
*
* @param \Illuminate\Http\Request $request リクエスト
* @param int $frame_id フレームID
* @param int $bucket_id バケツID
* @return int バケツID
*/
public function save($request, $page_id, $frame_id, $post_id = null)
{
// 入力エラーがあった場合は入力画面に戻る。
$validator = $this->getPostValidator($request);
if ($validator->fails()) {
return back()->withErrors($validator)->withInput();
}
// 記事の保存
$sample = $this->getPluginBucket($this->buckets->id);
$post = SamplePost::updateOrCreate(
['id' => $post_id],
[
'sample_id' => $sample->id,
'title' => $request->title,
'content' => $request->content,
],
);
// 登録後はリダイレクトして編集ページを開く。
return new Collection(['redirect_path' => url('/') . "/plugin/samples/index/" . $page_id . "/" . $frame_id . "/" . $post->id . "#frame-" . $frame_id]);
}
- 記事の登録処理
- getPostValidator 関数でエラーチェックの定義を取得。エラーチェックを実行し、エラーがあれば入力画面に戻る。
- 記事を保存する。記事は、プラグインのバケツに紐づける。
- 登録後は、記事一覧画面をリダイレクトで表示する。これにより、登録後のF5 押下でのトラブルも防ぐ。
/**
* 詳細表示
*
* @method_title 記事表示
* @method_desc 記事を1件、表示します。
* @method_detail 記事のURLを特定したい場合にはこの画面のURLを使用します。
*/
public function show($request, $page_id, $frame_id, $post_id)
{
// 記事取得
$post = $this->getPost($post_id);
// 編集画面を呼び出す。
return $this->view('show', [
'post' => $post,
]);
}
- 指定された記事の表示処理
/**
* 削除処理
*/
public function delete($request, $page_id, $frame_id, $post_id)
{
// データを削除
SamplePost::where('id', $post_id)->delete();
// 削除後はリダイレクトして一覧ページを開く。
return new Collection(['redirect_path' => url('/') . "/plugin/samples/index/" . $page_id . "/" . $frame_id . "#frame-" . $frame_id]);
}
- 指定された記事の削除処理
- home
- Overview
- Install
- Install (インストール)(Linux等へのインストール:root権限ある場合)
-
Install-sakura(さくらのレンタルサーバ)
- Install-sakura-root(ドキュメントルート版)
- Install-Xserver(XServer)
- Install-lolipop(ロリポップ-ハイスピードプラン)
- Install-ColorfulBox(カラフルボックス)
- install-CentOS7+PHP7
- Install-XAMPP(Windows+XAMPP)
- install-Docker
- Update
- Plans
- Data
- File Upload
- Design
- Theme(テーマ)
- Font-Icon(アイコン)
- Button(ボタン)
- Display of input error(入力エラーの表示)
- Multi Language
- Policies
- Plugin
- Basic function(基本の関数)
- Opac(蔵書管理)
- OpeningCalendar(開館カレンダー)
- Template(テンプレート)
- Cabinet(キャビネット)
- Whatsnew(新着)
- Search(サイト内検索)
- Approval(承認機能)
- Holidays(祝日管理)
- Menu(メニュー)
-
OriginalPlugin(オリジナル・プラグイン開発)
- OriginalPluginFiles(ファイル一覧)
- Sample.php
- SamplePost.php
- plugin.ini
- SamplesPlugin.php
- create_samples_table.php
- create_sample_posts_table.php
- samples_frame_edit_tab.blade.php
- card/index.blade.php
- card/template.ini
- default/bucket.blade.php
- default/edit.blade.php
- default/index.blade.php
- default/list_buckets.blade.php
- default/show.blade.php
- default/template.ini
- WYSIWYG
- Session
- Programing tips
- Rule(ルール)
- Laravel method tips
- Laravel reference pages
- PHP
- phpcs
- Datetimepicker(日付入力)
- Hook(処理のフック)
- SQL
- Pull-Request(Web画面上)
- Post
- Optimize
- Composer
- npm
- コントローラー側の$this--can()-の調査
- API (外部サービスAPI)
- Test Case(テストケース)
- memo(永原のメモ)
- TCPDF(実装サンプル)
- Phpunit(ユニットテスト)
-
Dusk(ブラウザテスト)
- Github-Actions-Dusk(Github Actionsでブラウザテスト)
- Dusk-Manual(マニュアル自動生成)
- Develop-Windows(Windows開発環境)
- users_columns(ユーザ任意項目)
- container-page-beta(コンテナ方式(ページ)対応(ベータ版))
- Migration
- Other
- Link
- MultiLanguage(多言語化の際の注意点)