在博客应用中,除了展示文章外,还展示项目,文章和项目都是在管理后台管理的,现在要实现在后台管理项目管理。
修改后台路由 app/Admin/routes.php文件,添加如下路由:
$router->resource('projects', 'ProjectsController');
使用代码生成器生成 ProjectsController.php 控制器文件。
在 ProjectsController控制器中,grid方法对应的是项目列表,修改 grid方法:
protected function grid()
{
return Grid::make(new Project(), function (Grid $grid) {
$grid->column('id')->sortable();
$grid->column('name');
$grid->column('cover')->image('',40,40);
$grid->column('created_at')->sortable();
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
$filter->like('name');
});
});
}
上面代码中,使用 image方法显示图片,设置高和宽为 40。
修改 Project模型,引入 HasDateTimeFormatter 解决时间显示不对的问题:
namespace App\Models;
use Dcat\Admin\Traits\HasDateTimeFormatter;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Project extends Model
{
use HasFactory;
use HasDateTimeFormatter;
public function milestones(){
return $this->hasMany(Milestone::class);
}
}
在 ProjectsController控制器中,form方法对应的是添加和编辑项目,修改form方法为如下内容:
protected function form()
{
return Form::make(new Project(), function (Form $form) {
$form->display('id');
$form->text('name');
$form->text('description');
$form->image('cover')->saveFullUrl();
$form->display('created_at');
$form->display('updated_at');
});
}
上面代码中,使用 image方法渲染表单中 cover字段为图片上传,图片上传成功后,图片上传到 storage/app/public/images目录下,HTTP 服务器指向的根目录是 public目录,要想用户能通过浏览器访问 storage 目录下的文件,需要创建一个软链接,Laravel 内置了这个命令:
php artisan storage:link
现在图片还是不会显示出来,因为图片地址不对,现在要修改 .env文件,将 APP_URL修改为域名。
.env
.
.
.
APP_URL=http://blog.test
.
.
.
为了方便管理,打开菜单,在内容管理菜单下面添加一个项目管理菜单。