安装git https://github.com/etrepat/baum
运行install后会生成migrate,默认有id, parent_id, lft, rgt, depth, 其他根据自己需要自定
$table->increments('id');
$table->string('title')->comment('栏目名称');
$table->integer('parent_id')->nullable()->index()->comment('父级id'); //生成的
$table->string('keywords')->nullable();
$table->string('description')->nullable();
$table->integer('sort');
$table->integer('is_show')->comment('是否显示');
$table->integer('lft')->nullable()->index(); //生成的
$table->integer('rgt')->nullable()->index(); //生成的
$table->integer('depth')->nullable(); //生成的
模型:
model不继承Model,需要继承Node
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Baum;
class Taxon extends Baum\Node
{
protected $table = 'taxons';
protected $fillable=['title','parent_id','keywords','description', 'sort', 'is_show', 'lft', 'rgt', 'depth'];
}
自动填充
<?php
namespace App\Jobs;
use App\Taxon;
use Illuminate\Bus\Queueable;
use Illuminate\Foundation\Bus\Dispatchable;
class TaxonFormFields
{
use Dispatchable, Queueable;
protected $id;
protected $fieldList = [
'title' => '',
'parent_id' => '',
'keywords' => '',
'description' => '',
'is_show' => '1',
'sort' => '50',
];
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($id = null)
{
$this->id = $id;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$fields = $this->fieldList;
if ($this->id) {
$fields = Taxon::findOrFail($this->id);
}
return $fields;
}
}
自定义request
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class TaxonRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'title' => 'required'
];
}
/**
* Return the fields and values to create a new post from
*/
public function fillData()
{
return [
'title' => $this->title,
'parent_id' => $this->parent_id,
'keywords' => $this->keywords,
'description' => $this->description,
'is_show' => $this->is_show,
'sort' => $this->sort,
'lang' => 'zh-cn',
];
}
}
表单
<div class="form-group">
<label for="taxon_title" class="col-sm-1 control-label">{{ trans('admin.title') }}</label>
<div class="col-sm-11">
<input type="text" class="form-control" id="taxon_title" name="title" value="{{ $title }}">
<p class="help-block">{{ $errors->first('title') }}</p>
</div>
</div>
<div class="form-group">
<label for="taxon_keywords" class="col-sm-1 control-label">{{ trans('admin.keywords') }}</label>
<div class="col-sm-11">
<input type="text" class="form-control" id="taxon_keywords" name="keywords" value="{{ $keywords }}">
</div>
</div>
<div class="form-group">
<label for="taxon_description" class="col-sm-1 control-label">{{ trans('admin.description') }}</label>
<div class="col-sm-11">
<textarea class="form-control" id="taxon_description" name="description">{{ $description }}</textarea>
</div>
</div>
<div class="form-group">
<label for="taxon_is_showe" class="col-sm-1 control-label">{{ trans('admin.is_show') }}</label>
<div class="col-sm-11">
<input type="radio" id="taxon_is_show_1" name="is_show" value="{{ $is_show }}" @if($is_show == 1) checked="checked" @endif> {{ trans('admin.yes') }}
<input type="radio" id="taxon_is_show_0" name="is_show" value="{{ $is_show }}" @if($is_show == 0) checked="checked" @endif> {{ trans('admin.no') }}
</div>
</div>
<div class="form-group">
<label for="taxon_sort" class="col-sm-1 control-label">{{ trans('admin.sort') }}</label>
<div class="col-sm-11">
<input type="text" class="form-control" id="taxon_sort" name="sort" value="{{ $sort }}">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-1 col-sm-11">
<input type="hidden" name="parent_id" value="{{ $parent_id }}" />
<input type="submit" class="btn btn-default" value="提交" />
</div>
</div>
添加分类
/**
* 创建新表单页面
*
* @return Response
*/
public function create(Request $request)
{
$taxon = $this->dispatch(new TaxonFormFields());
$parent_id = $request->get( 'parent_id', '');
$taxon['parent_id'] = $parent_id;
return view('admin/taxon/create', $taxon);
}
/**
* 将新创建存储到存储器
*
* @param Request $request
* @return Response
*/
public function store(TaxonRequest $request)
{
$parent = Taxon::find($request->input('parent_id'));
$taxon = Taxon::create($request->fillData());
$taxon->makeChildOf($parent);
return redirect('admin/taxons');
}
修改如果只修改数据,不修改分类结构就按照laravel修改就可以,
/**
* 显示编辑表单页面
*
* @param int $id
* @return Response
*/
public function edit($id)
{
$taxon = $this->dispatch(new TaxonFormFields($id));
return view('admin/taxon/edit', $taxon);
}
/**
* 在存储器中更新
*
* @param Request $request
* @param int $id
* @return Response
*/
public function update(TaxonRequest $request, $id)
{
$taxon = Taxon::findOrFail($id);
$taxon = $taxon->fill($request->fillData());
$taxon->save();
return redirect('admin/taxons');
}
删除
/**
* 从存储器中移除
*
* @param int $id
* @return Response
*/
public function destroy($id)
{
$taxon = Taxon::findOrFail($id);
$taxon->delete();
return response()->json(['error_num' => '0', 'link' => '/admin/taxons']);
}