路由配置
Route::group(['middleware' => 'auth', 'namespace' => 'Admin', 'prefix' => 'admin'], function() {
Route::get('/', 'HomeController@index'); // 匹配包含 "/admin/" 的 URL Route::resource('article', 'ArticleController');// 匹配包含 "/admin/article" 的 URL
Route::post('/upload', 'UploadController@index');// 匹配包含 "/admin/upload" 的 URL
});
路由组 允许共享路由属性,例如中间件和命名空间等,我们没有必要为每个路由单独设置共有属性,共有属性会以数组的形式放到 Route::group 方法的第一个参数中。
中间件('middleware' => 'auth'),验证用户是否登录。
命名空间 ('namespace' => 'Admin') ,指定组内所有控制器公共的 PHP命名空间。
路由前缀 ('prefix' => 'admin'),可以给每个路由组中的路由加上指定的 URI 前缀。这里我们给路由组中所有的 URI 加上路由前缀 admin 。
资源路由 (Route::resource), 可以匹配一组URI。匹配的详情如下。
动作 | URI | 操作 | 路由名称 |
---|---|---|---|
GET | /article |
index | article.index |
GET | /article/create |
create | article.create |
POST | /article |
store | article.store |
GET | /article/{article} |
show | article.show |
GET | /article/{article}/edit |
edit | article.edit |
PUT/PATCH | /article/{article} |
update | article.update |
DELETE | /article/{article} |
destroy | article.destroy |
controller
php artisan make:controller Admin/HomeController php artisan make:controller Admin/UploadController php artisan make:controller Admin/ArticleController
执行以上三条命令,建立后台使用的controller。第一个是后台首页,第二个是处理上传,最后一个是管理文章。
在ArticleController里需要建立与资源路由匹配的各种方法才能实现资源路由的各种功能。
public function index() { $articles = DB::table('articles') ->select('id', 'body', 'title') ->orderBy('id', 'desc') ->paginate(5); return view('admin/article/index', ['articles' => $articles]); }
以上是文章列表功能,这里指定了表名、列、排序和分页。然后取出的数据放到view里显示。
这里集成了七牛实现上传到云的功能。
执行以下命令可以安装七牛PHP的SDK
composer require qiniu/php-sdk
把从七牛申请的密钥写在.env里,然后controller里可以用env函数来读取。这样可以保证发布的版本不会泄露自己的重要信息。
view
在resources/views 目录下建立admin目录,然后建立home.blade.php,用来显示后台首页。然后admin目录下建立article子目录,并在其中建立create.blade.php 、edit.blade.php 、index.blade.php 三个文件。用来实现新建文章、编辑文章和文章列表。
要点:
- 前台显示文章正文有两种方法:{!! $article->body !!} 和 {{ $article->body }},前面的可以原样输出正文的HTML,而后面的会把HTML转义,从而在浏览器前台输出HTML代码,而不是让浏览器解析HTML。
- ajax提交图片上传时,一定要在header中附加上X-CSRF-TOKEN,否则后台如果没收到的话,会报错。写法参考:'X-CSRF-TOKEN': '{{ csrf_token() }}'
挑选了各环节的一些要点写出来在博客中,源代码可以在我的GitHub上获取到。欢迎交流。