Laravel框架学习(RESTFul用法)

1、创建RESTFul风格控制器
运行artisan命令创建控制器
php artisan make:controller PostController
该命令会在app/Http/Controllers目录下生成一个PostController.php文件,该控制器内容如下:

/**
         * 显示文章列表.
         *
         * @return Response
         */
        public function index()
        {
            //
        }

        /**
         * 创建新文章表单页面
         *
         * @return Response
         */
        public function create()
        {
            //
        }

        /**
         * 将新创建的文章存储到存储器
         *
         * @param Request $request
         * @return Response
         */
        public function store(Request $request)
        {
            //
        }

        /**
         * 显示指定文章
         *
         * @param int $id
         * @return Response
         */
        public function show($id)
        {
            //
        }

        /**
         * 显示编辑指定文章的表单页面
         *
         * @param int $id
         * @return Response
         */
        public function edit($id)
        {
            //
        }

        /**
         * 在存储器中更新指定文章
         *
         * @param Request $request
         * @param int $id
         * @return Response
         */
        public function update(Request $request, $id)
        {
            //
        }

        /**
         * 从存储器中移除指定文章
         *
         * @param int $id
         * @return Response
         */
        public function destroy($id)
        {
            //
        }
    }

2、为RESTFul风格控制器注册路由
接下来我们在routes.php文件中为该控制器注册路由:

Route::resource('post','PostController');

该路由包含了指向多个动作的子路由:

方法 路径 动作 路由名称
GET /post index post.index
GET /post/create create post.create
POST /post store post.store
GET /post/{post} show post.show
GET /post/{post}/edit edit post.edit
PUT/PATCH /post/{post} update post.update
DELETE /post/{post} destroy post.destroy

比如我们在浏览器中以GET方式访问http://selfstudy.com/post,则访问的是PostController的index方法,我们可以通过route(‘post.index’)生成对应路由URL。类似的,如果我们以POST方式访问http://selfstudy.com/post,则访问的是PostController的store方法,对应的POST表单action属性值则可以通过route(‘post.store’)来生成。

3、Demo-文章增删改查
接下来我们演示基本的增删改查操作,这里我们使用缓存作为存储器(Laravel默认使用文件缓存)。

注意:我们这里用到了Cache门面,使用前不要忘了在PostController顶部使用use Cache;引入。关于Cache的用法,可参考缓存文档。

3.1 新增文章

首先我们新增一篇文章,定义PostController控制器的create方法和store方法如下(这里就将HTML放到PHP变量里):

/**
* 创建新文章表单页面
*
* @return Response
*/
public function create()
{
    $postUrl = route('post.store');
    $csrf_field = csrf_field();
    $html = <<"$postUrl" method="POST">
            $csrf_field
            type="text" name="title">



type="submit" value="提交"/> CREATE; return $html; } /** * 将新创建的文章存储到存储器 * * @param Request $request * @return Response */ public function store(Request $request) { $title = $request->input('title'); $content = $request->input('content'); $post = ['title'=>trim($title),'content'=>trim($content)]; $posts = Cache::get('posts',[]); if(!Cache::get('post_id')){ Cache::add('post_id',1,60); }else{ Cache::increment('post_id',1); } $posts[Cache::get('post_id')] = $post; Cache::put('posts',$posts,60); return redirect()->route('post.show',['post'=>Cache::get('post_id')]); }

3.2 查看文章

访问http://selfstudy.com/post/create页面,填写表单,点击“提交”,保存成功后,页面跳转到详情页:

/**
* 显示指定文章
*
* @param int $id
* @return Response
*/
public function show($id)
{
    $posts = Cache::get('posts',[]);
    if(!$posts || !$posts[$id])
        exit('Nothing Found!');
    $post = $posts[$id];

    $editUrl = route('post.edit',['post'=>$id]);
    $html = <<{$post['title']}
        

{$post['content']}

编辑

DETAIL;
return $html; }

3.3 编辑文章

同理我们定义编辑文章对应的edit方法和update方法如下:

/**
* 显示编辑指定文章的表单页面
*
* @param int $id
* @return Response
*/
public function edit($id)
{
    $posts = Cache::get('posts',[]);
    if(!$posts || !$posts[$id])
        exit('Nothing Found!');
    $post = $posts[$id];

    $postUrl = route('post.update',['post'=>$id]);
    $csrf_field = csrf_field();
    $html = <<"$postUrl" method="POST">
            $csrf_field
            type="hidden" name="_method" value="PUT"/>
            type="text" name="title" value="{$post['title']}">



type="submit" value="提交"/> UPDATE; return $html; } /** * 在存储器中更新指定文章 * * @param Request $request * @param int $id * @return Response */ public function update(Request $request, $id) { $posts = Cache::get('posts',[]); if(!$posts || !$posts[$id]) exit('Nothing Found!'); $title = $request->input('title'); $content = $request->input('content'); $posts[$id]['title'] = trim($title); $posts[$id]['content'] = trim($content); Cache::put('posts',$posts,60); return redirect()->route('post.show',['post'=>Cache::get('post_id')]); }

3.4 删除文章

我们还可以使用destroy方法删除文章:

/**
* 从存储器中移除指定文章
*
* @param int $id
* @return Response
*/
public function destroy($id)
{
    $posts = Cache::get('posts',[]);
    if(!$posts || !$posts[$id])
        exit('Nothing Deleted!');

    unset($posts[$id]);
    Cache::decrement('post_id',1);

    return redirect()->route('post.index');

}

要删除文章,需要参考编辑表单伪造删除表单方法为DELETE(这里是指表单里的method的值为DELETE)(一般使用AJAX删除)

3.5 文章列表

最后我们再来定义一个用于显示所有文章列表的index方法:

/**
* 显示文章列表.
*
* @return Response
*/
public function index()
{
    $posts = Cache::get('posts',[]);
    if(!$posts)
        exit('Nothing');

    $html = '';

    return $html;
}

你可能感兴趣的:(Laravel框架)