header('短链接列表') ->description('') ->body($this->grid()); } /** * Edit interface. * * @param mixed $id * @param Content $content * @return Content */ public function edit($id, Content $content) { return $content ->header('短链接列表') ->description('编辑') ->body($this->editForm($id)->edit($id)); } /** * Create interface. * * @param Content $content * @return Content */ public function create(Content $content) { return $content ->header('短链接列表') ->description('创建') ->body($this->createForm()); } /** * Make a grid builder. * * @return Grid */ protected function grid() { $grid = new Grid(new ShortUrl); $grid->id('ID'); $grid->name('名称')->width(400); $grid->key('短链接')->width(200); $grid->column('短链接带域名')->display(function(){ return route('short_url',['url'=>$this->key]); })->width(200); $grid->url('原链接')->width(400); $grid->actions(function ($actions) use ($grid) { $actions->disableEdit(false); $actions->disableDelete(false); }); $grid->disableCreateButton(false); $grid->filter(function ($filter) { $filter->where(function ($query) { $query->where('name', 'like', "%{$this->input}%"); }, '名称'); $filter->where(function ($query) { $query->where('key', 'like', "%{$this->input}%")->orWhere('url', 'like', "%{$this->input}%"); }, '链接'); }); return $grid; } protected function form() { $grid = new ValidateForm(new ShortUrl); return $grid; } protected function editForm($id) { $form = new Form(new ShortUrl); $form->text('name', '名称')->rules([ 'required', ])->setWidth(3)->setMustMark(); $form->text('key', '短链接')->rules([ 'required', Rule::unique('short_url')->ignore($id), ])->setWidth(3)->setMustMark(); $form->text('url', '原始链接')->rules([ 'required', ])->setWidth(8)->setMustMark(); return $form; } protected function createForm() { $form = new Form(new ShortUrl); $form->text('name', '名称')->rules([ 'required', ])->setWidth(3)->setMustMark(); $form->text('key', '短链接')->rules([ 'required', 'unique:short_url', ])->setWidth(3)->setMustMark()->value($this->_getShortUrl()); $form->text('url', '原始链接')->rules([ 'required', ])->setWidth(8)->setMustMark(); return $form; } /** * Store a newly created resource in storage. * * @return mixed */ public function store() { return $this->createForm()->store(); } /** * Update the specified resource in storage. * * @param int $id * * @return \Illuminate\Http\Response|\Symfony\Component\HttpFoundation\Response */ public function update($id) { return $this->editForm($id)->update($id); } public function destroy($id) { if ($this->form()->destroy($id)) { $data = [ 'status' => true, 'message' => trans('admin.delete_succeeded'), ]; } else { $data = [ 'status' => false, 'message' => trans('admin.delete_failed'), ]; } return response()->json($data); } /** * 生成短链接 */ private function _getShortUrl() { return $this->_base62(); } private function _base62() { $base32 = [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", ]; $output = ''; $len = count($base32); for ($i = 0; $i < 6; $i++) { $num = mt_rand(0, $len - 1); $output .= $base32[$num]; } return $output; } }