Laravel-adminでテーブルにデータを追加した後に、別のテーブルにも直後にデータを追加するというようなカスタマイズをしたいと思ったものの、Laravel-adminがそもそもLaravelの正規ライブラリではなく、しかも中国製なので参考記事があまりませんでした。
というわけで、自分でソースコードを探ってきました。
修正箇所
テーブルにデータを追加した後に何か処理をカスタムで行いたい場合には, /vender/encore/laravel-admin/src/Form.phpで定義されているFormというクラスを継承したカスタムクラスを作成する必要があります。
今回はLaravel-adminのテーブル別のページに対応したController.phpに、そのカスタムクラスを直書きすることにします。
もし、Formのカスタムクラスの定義を別ファイルで行いたいという場合には各自でお願いします。
/app/Admin/Controllers/SampleControllers.phpの変更部分を以下に載せます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<?php namespace App\Admin\Controllers; use App\Sample; use Encore\Admin\Controllers\AdminController; use Encore\Admin\Form; use Encore\Admin\Grid; use Encore\Admin\Show; /** * テーブル追加の直後に好きな処理を行うFormのカスタムクラス * */ class SampleForm extends Form { protected function redirectAfterStore() { // ここに行いたい処理を書く $resourcesPath = $this->resource(0); $key = $this->model->getKey(); return $this->redirectAfterSaving($resourcesPath, $key); } } class SampleController extends AdminController { (省略) /** * Make a form builder. * * @return Form */ protected function form() { $form = new SampleForm(new Sample); // ここをFormからSampleFormに変更する (省略) return $form; } } |
コードの解説
ざっくりな説明ですが, 上記のコードではFormクラスのカスタムクラスを作成し、redirectAfterStore()というメソッドをオーバーライドしています。
このメソッドはFormクラスのStore()で、管理画面で追加したデータをデータベースに保存した後に呼ばれるメソッドで、ここに行いたい処理を記述することよって好きな操作を実行させることができます。