资讯专栏INFORMATION COLUMN

laravel5.5手写教程3的基于资源路由的CURD操作(适合初学者)

olle / 734人阅读

摘要:新增一篇新闻新增失败输入不符合要求请输入标题请输入内容新增文章上面代码中的是为了防攻击的,每个表单都必须存在。

本文我将结合简单例子,完成laravel框架下的增删改查,希望会对大家有所帮助。
在进行之前,大家应该保证自己的数据库链接无误,artisan命令能正常使用,路由链接无问题。

一、创建控制器、路由
避免影响其他路由,我们先注释掉之前联系时编写的所有路由。
因为上一章我们已经学会建立了资源控制器,这里再次复习一下。
1)打开CMD并切换到项目根目录
2)创建REST风格的控制器

php artisan make:controller NewsController --resource 

3)创建资源路由打开routes/web.php,输入:

Route::resource("/","NewsController");

二、展示页面
当我们访问URL 127.0.0.1:9999时,通过资源路由访问的是NewsController控制器里的index方法。此刻我们在控制器里引入Model类,通过Eloquent ORM方法,往视图层引入参数。

此时我们需要创建视图层,位置在resourcec/views/news/index.blade.php。
具体代码如下:

 
新闻管理
@if (count($errors) > 0)
{!! implode("
", $errors->all()) !!}
@endif 新增 @foreach ($news as $new)

{{ $new->title }}

{{ $new->content }}

id."/edit") }}" class="btn btn-success">编辑
id) }}" method="POST" style="display: inline;"> {{ method_field("DELETE") }} {{ csrf_field() }}
@endforeach

下面我们访问页面:127.0.0.1:9999,查看数据展示情况如下:

如上图,我们的列表展示已经完成,不过因为时间问题,界面未加前端样式,大家不要在意,至此,我们的展示页面完成。

三、增加页面
因为展示页面点击新增后,页面通过路由跳转到News控制器的create方法下:create方法如下:

上图我们要注意,在laravel中,视图url链接可以用“ / ”分割,也可以用“ . ”来分割,后者看起来更为优雅一些。

    
新增一篇新闻
@if (count($errors) > 0)
新增失败 输入不符合要求

{!! implode("
", $errors->all()) !!}
@endif
{!! csrf_field() !!}

(上面代码中的{!! csrf_field() !!} 是为了防CSRF攻击的,每个表单都必须存在。)
web页面:

根据资源路由,提交该表单后,会通过路由,提交到News控制器的store方法下:
此刻输入如下代码:

/**
 * Store a newly created resource in storage.
 *
 * @param  IlluminateHttpRequest  $request
 * @return IlluminateHttpResponse
 */
public function store(Request $request)
{
   var_dump($request->all());
}

打印出来传递过来的所有变量,如下所示:

我们可以看到传递过来的参数除了表字段外还有CSRF验证码,_token字段,所以如果去掉这个字段,跳转是不会成功的。
此时我们可以通过get 或者post来接收参数并赋值给数组,然后通过Eloquent 方法来入库,具体操作如下:

    /**
 * Store a newly created resource in storage.
 *
 * @param  IlluminateHttpRequest  $request
 * @return IlluminateHttpResponse
 */
public function store(Request $request)
{
    // 对提交过来的数据进行数据验证
    $this->validate($request, [
        "title" => "required|unique:news|max:255", // 必填、在 news 表中唯一、最大长度 255
        "content" => "required", // 必填
    ]);

    // 通过 News Model 插入一条数据进 news 表
    $news = new News; // 初始化 Article 对象
    $news->title = $request->get("title"); // 将 POST 提交过了的 title 字段的值赋给 news 的 title 属性
    $news->content = $request->get("content"); // 同上

    // 将数据保存到数据库,通过判断保存结果,控制页面进行不同跳转
    if ($news->save()) {
        return redirect("/"); // 保存成功,跳转到 文章管理 页
    } else {
        // 保存失败,跳回来路页面,保留用户的输入,并给出提示
        return redirect()->back()->withInput()->withErrors("保存失败!");
    }
}

此刻我们可以看到页面:

添加失败,我们分析原因可以得出是因为在进行数据库save()时,laravel会自动多出两个字段updated_at和created_at,而我们的表是手动建的,并没有这两个字段,那如何取消呢?
我们只需要往模型层加入属性:

public $timestamps = false;

即可添加完成,并成功跳转到新闻列表页面,至此表单的简单添加完成。

四、删除页面
接下来我们来看一下删除页面,相对于添加来说,删除页面尤为简单,我们是通过展示页面中的
删除按钮来通过表单提交方式进行删除操作,index.blade.php里面是这样写的。

                        
id) }}" method="POST" style="display: inline;"> {{ method_field("DELETE") }} {{ csrf_field() }}

可以看到表单中的提交方法仍然是POST,而为了让资源路由识别,我们加上了{{ method_field("DELETE") }}这段代码 ,他的作用等同于

提交后,会把该条数据的ID传递到资源控制器的destroy方法内,下面我们来实现以下:
根据我们路由里写的:

Route::resource("/","NewsController");

此刻我们会发现,点击删除按钮后居然报404错误,跳转路径为127.0.0.1/{id} ,确认删除的表单按钮传递参数无误之后,我们在cmd中输入 php artisan route:list,可以看到下面的资源路由信息:


我们可以看到资源路由器的更新和删除,以及查询方法的URL路径是{},既花括号里是没有值,这样子是找不到网页的,所以我们需要通过重新命名路由来实现即改为:

Route::resource("comment","NewsController");

这样我们再看:


此时URL中的变量是有值的。这里我们要注意记得修改index.blade.php 以及 create.blade.php 视图页面的跳转url路径加上comment。
我们继续完成NewsController控制器里的destroy删除方法:

/**
 * Remove the specified resource from storage.
 *
 * @param  int  $id
 * @return IlluminateHttpResponse
 */
public function destroy($id)
{
    News::find($id)->delete();
    return redirect()->back()->withInput()->withErrors("删除成功!");
}

至此,表单的简单删除已经完成,如果需要做ajax删除的时候,只需要把id传递到控制器进行删除,需要重写方法,此时就需要继续定义路由。

五、修改页面
当我们点击index.blade.php页面的修改之后,通过cmd里的路由资源列表可以知道,正确路径应该是通过超链接把id传递到控制器的edit方法里了。

id."/edit") }}" class="btn btn-success">编辑

此时edit方法代码如下:

    /**
 * Show the form for editing the specified resource.
 *
 * @param  int  $id
 * @return IlluminateHttpResponse
 */
public function edit($id)
{
    //        var_dump(News::find($id)->toArray());
    return view("news.edit")->withNew(News::find($id));
}

通过Eloquent 对象关系映射获取到该ID对应的该条信息,传递到视图层中,并展示出来:
edit.blade.php:



    
        
        
        

        Learn Laravel 5

        
        
        
    
    
        
@if (count($errors) > 0)
操作失败 输入不符合要求

{!! implode("
", $errors->all()) !!}
@endif
id) }}" method="POST"> {!! csrf_field() !!} {{----}}

修改好后表单提交,通过资源路由提交到NewsController控制器的update方法内,然后我们在update内先打印出$request->all()的值,可以得到下面数据:


然后ID也已经传过来了,我们通过数据库修改即可完成修改功能,余下代码如下:

    /**
     * Update the specified resource in storage.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function update(Request $request, $id)
    {
//        var_dump($request->all());
        $comment = News::findOrFail($id);
        $comment->title = $request->get("title");
        $comment->content = $request->get("content");
        if($comment->save()){
            return redirect("comment/");
        }else{
            return redirect()->back()->withInput()->withErrors("保存信息失败");
        }
    }

即可完成修改,成功后跳转到列表页面。
学到这里我们不难发现,这个Laravel自带的Eloquent ORM 是一个优美,稳定,简洁的ActiveRecord实现。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30636.html

相关文章

  • windows下laravel5.5手写教程2路由Eloquent ORM操作适合学者

    摘要:一路由目录众所周知,对于我们熟知的任何一款框架,例如路由系统都是极其重要的存在。文件用于定义界面的路由。定义在中的路由都是无状态的,并且被分配了中间件组。生成的控制器为每个行为保留了方法,同时还包括了处理动作和的声明注释。 一、路由目录 众所周知,对于我们熟知的任何一款PHP框架,例如TP、CI、YII、路由系统都是极其重要的存在。 对于laravel框架也一样,对于数据库的操作,无非...

    BlackFlagBin 评论0 收藏0
  • windows下laravel5.5手写教程1(适合学者

    摘要:打开浏览器输入,如无意外,将出现如下图,表示框架安装成功。四系统内部后台管理系统这个是框架自带的后台登录管理系统,只需要简单的命令即可运行。出现上图即为,创建模型成功。 在PHP个各种web开发框架中,laravel算是一款简洁、优雅的开发框架,本人也刚刚接触到laravel,通过学习大神们的一些文章,下面是我的一些心得体会,希望可以给初学者一些帮助,大家一起进步。言归正传: 本人环境...

    GeekGhc 评论0 收藏0
  • laravel5.5手写教程4Eloquent ORM分页及软删除

    摘要:从而达到了软删除。不过,你可以通过在查询中调用方法来强制查询已被软删除的模型方法也可以被用在关联查询只取出软删除数据会只取出软删除数据恢复被软删除的模型有时候你可能希望取消删除一个已被软删除的模型。 Laravel 有三宝,路由、容器和 Eloquent ORM,Eloquent ORM。我个人一直比较推荐于在实际操作中学习,之前简单了解了路由和Eloquent ORM的基本用法,今天...

    mindwind 评论0 收藏0
  • 从零开始搭建论坛(三):Flask框架简单介绍

    摘要:我们的论坛项目就使用了该框架。此外,麦子学院也有一个入门视频教程,一共小时的视频教程,涵盖开发的方方面面,包括环境的搭建,语法介绍,项目结构的组织,全球化,单元测试等内容。博客地址更多阅读的机制三个框架的对比 前面两篇文章中我们已经了解 Web(HTTP)服务器,Web应用程序,Web框架,WSGI这些 Python Web 开发中的概念。我们知道,Web框架通过将不同Web应用程序中...

    Alan 评论0 收藏0

发表评论

0条评论

olle

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<