zoukankan      html  css  js  c++  java
  • laravel笔记4文章模块

    ------------恢复内容开始------------

    Missing required parameters for [Route: admin.news.edit] [URI: admin/news/{news}/edit]. (View: E:phpStudy_64phpstudy_proWWWyfkt.com esourcesviewsadmin ewsindex.blade.php)

    Previous exceptions
    解决:对单个新闻的编辑和删除的时候blade里面的路由要有id参数(
    href='{{route('admin.news.edit',['news'=>$item->id])}}' role="button">编辑</a>

    ------------恢复内容结束------------

    在编辑文章时显示文章修改的数据,在控制器里修改

    //这里面News是个模型 $news是用来保存数据的(用with)
        public function edit(News $news)
        {
            //可以打印一下$news 里面是有数据的
            dd($news);
            return view('admin.news.edit')->with('news',$news);
        }
    然后在blade模板相应html属性里添加value="{{$news->title}},提交数据的地址要改为(xxxxx.update,id)里面不要忘了带参数id
     <form class="forms-sample" action={{route('admin.news.update','news'=>$news->id])}} method="POST" enctype="multipart/form-data">
     
    错误提示:
    The POST method is not supported for this route. Supported methods: GET, HEAD, PUT, PATCH, DELETE.
    解决:执行php artisan route:list看提交的路由是什么请求方式,在这里是put(表单默认只支持get和post)
    方法1@method('PUT') blade里面加这个代码 方法2 路由里面用any或者match 参考官方文档
     
    {!!$news->content!!}这个可以防止js代码里html代码转义
    ---------------------------------------------------------------------

    编辑修改文章控制器方法

    public function update(Request $request, News $news)
        {
            //前两个request是修改文章后提交的 后面两个news是原有的
            //dd($request->post());
            $data = [
                'title'=>$request->title,
                'keyword'=>$request->keyword,
                'desc'=>$request->desc,
                'remark'=>$request->remark,
                'views'=>$request->views,
                // 'pic'=>$request->pic,
                'content'=>$request->content,
            ];
            // 判断是存在图片文件
            if($request->file('file')){
                $data['pic'] = $request->file('file')->store('news');
           Storage::delete($news->pic); //这条命令是用来删除旧的图片
            }
            $NewsModel = new News;
            $result = $NewsModel::where('id','=',$news->id)->update($data);
            // dd($result); 打印结果为1
            if($result>0){
                session()->flash('data',['class'=>'success','msg'=>'编辑成功']);
            }else{
                session()->flash('data',['class'=>'danger','msg'=>'编辑失败']);
            }
            return redirect(route('admin.news.index'));
        }
     

    删除文章的控制器方法

     public function destroy(News $news)
        {
            
            // $result = (new News)::destroy($news->id);  返回值是删除的条数
            //用delete返回值是布尔值
            $result = $news->delete();
        Storage::delete($news->pic); //这条命令是用来删除旧的图片
     
            if($result){
                session()->flash('data',['class'=>'success','msg'=>'删除成功']);
            }else{
                session()->flash('data',['class'=>'danger','msg'=>'删除失败']);
            }
            return redirect(route('admin.news.index'));
            } 
        }
    错误提示 如果直接使用官方文档的destroy方法dd打印结果没有返回值的时候,可以修改路由文件,
    使用get方式获取删除链接(delete方法获取不到链接)
    解决方法:
    //新闻模块 不用destroy路由 自己新增一条删除路由
        Route::resource('/news', 'AdminNewsController')->except('destroy');
        Route::get('admin/news/{news}/del', 'AdminNewsController@destroy')->name('news.delete');
     
    然后使用上面提到的destroy或者delete( // $result = (new News)::destroy($news->id);  返回值是删除的条数
            //用delete返回值是布尔值
            $result = $news->delete();
     
    ===========================================================================================
     
    编辑修改或者删除文章的时候,图片会保存下来,如果不删除原有的图片的话。因此编辑修改文章的时候更新图片的同时就要删除旧的图片
    Storage::delete($news->pic);
    使用官方文档推荐的命令即可 放在控制器相应的地方
     
    ======================================================================================
     

    代码优化以及公共函数使用

    公共函数放在bootstrap里面可以建立common.php文件,把公共函数放在里面,比如操作提示函数

    <?php
    function checkreturn($blur = false, $msg='操作'){
        if($msg){
                session()->flash('data',['class'=>'success','msg'=>$msg.'成功']);
            }else{
                session()->flash('data',['class'=>'danger','msg'=>$msg.'失败']);
            }
    }
    ?>

    然后在bootstrapapp.php里面注册一下

    require __DIR__.'/common.php';
     
    最后在控制器相应的方法里面调用
     
            checkreturn($NewsModel->save(),'添加'); //这个是添加方法
     
            checkreturn($result>0,'修改'); //这个是修改方法
     
        
    //这个是删除方法
    public function destroy(News $news)
        {
            
            // $result = (new News)::destroy($news->id);  返回值是删除的条数
            //用delete返回值是布尔值
            $result = $news->delete();
            Storage::delete($news->pic);
            checkreturn($result,'删除');
            return redirect(route('admin.news.index'));
            } 

        }

    到这里文章模块全部完成

  • 相关阅读:
    解决Shiro在Tomcat重启之后丢失登录信息
    代码安全审计大全
    解决Spring Boot打包war部署到Tomcat出现Could not open ServletContext resource
    weblogic12 重装记录
    【Spring】事物和锁及回滚异常类型
    【Spring】thymeleaf + SpringMVC局部刷新
    【Spring】@ModelAttribute三种使用场景
    Java Optional
    JAVA lambda
    最短时间(最短路+思维)
  • 原文地址:https://www.cnblogs.com/fightforcoder/p/13447767.html
Copyright © 2011-2022 走看看