Froms的使用实例

来源:互联网 发布:江湖婚庆 3.0源码 编辑:程序博客网 时间:2024/05/18 16:15

视图模板

index.blade.php

{!! Form::open(['url'=>'/articles']) !!} //指定文章上传路由<div class="form-group"> //添加样式    {!! Form::label('title')!!}    {!! Form::text('title',null,['class'=>'form-control',‘id'=>3])!!} //添加样式,也可传参。</div><!--- content Field ---><div class="form-group">    {!! Form::label('content', 'content:') !!}    {!! Form::textarea('content', null, ['class' => 'form-control']) !!}</div><!--- published_at Field ---><div class="form-group">    {!! Form::label('published_at', ':') !!}    {!! Form::input('date','published_at', date('Y-m-d'), ['class' => 'form-control']) !!}</div>{!! Form::submit('发表文章',['class'=>btn btn-primary form-control'])!!}{!! Form::close()!!}//将错误内容输出@if($errors->any())<ul class="list-group">    @foreach($errors->all() as $error)        <li class="list-group-item list-group-item-danger">{{ $error }}</li>    @endforeach</ul>@endif

路由

Route::get('/articles','ArticlesController@index');Route::get('/articles/create','ArticlesController@create');Route::get('/articles/{id}','ArticlesController@show');Route::post('/articles','ArticlesController@store');

控制器

ArticlesController.php

public function index(){    //$articles=Article::latest()->where('published_at','<=',Carbon::now())->get();  latest()方法使最新发布的文章排在最上面,where('published_at','<=',Carbon::now())的作用是使未来时间的内容不能再页面上显示    $articles=Article::latest()->published()->get(); //latest()方法使最新发布的文章排在最上面,published()是调用了数据库Article的一个成员方法    return view('articles.index',compact('articles'));}public function show($id){    $article=Article::findorFail($id)    //关于Carbon的应用    //使用下段代码可以输出关于15 minute ago    //dd($artcle->created_at->diffForHumans())    //如果使用published_at,则会报错call to a member function diffForHumans() on string,因为Carbon对象默认处理的不是pubished_at    //则需要再数据库Article中输入一段代码 protected $dates=['published_at']    //dd($artcle->published_at->diffForHumans())    return view('article.show',compact('article'));}public function create($id){    return view('article.create');}//public function store(Request $request)//修改成可以使用Requests的实例化应用,变量$request是Requests\CreateArticleRequest对象的实例化//lavarel会将全部的数据进行Requests\CreateArticleRequest规则验证,如果提交的代码没有通过Requests\CreateArticleRequest这项规则的话,下面的方法是不会调用的。public function store(Requests\CreateArticleRequest $request){    //打印全部获取的数据    //dd($request->all());    //获取某一字段的值,如获取文章的title的值    //$request->get('title');    //1 接受post传过来的数据    //2 存入数据库    //3 重定向    //$input=$request->all()    //$input['published_at']=carbon::now();    //Article::create($input); 创建字段时,laravel会自动过滤掉token值    //return view('articles/');    Article::create($request->all());    return redirect('/articles')}

注:表单中自动生成的 _token 提交到后台如何过滤掉?

$input = $request->only(['username', 'password']); //填写你需要写入DB的字段$input = $request->only('username', 'password'); //同上$input = $request->except(['_token']); //去除某一字段, 如这的_token$input = $request->except('_token'); //同上

数据库模型

class Article extends Model{    protected $fillable=['title','content','published_at'];    //将published_at设置成Carbon对象处理的时间字段    protected $dates=['published_at']    //setTitleAttribute,这段代码的作用是:在写入数据库之前,会先转换成Carbon设置的时间格式,然后再写出数据库当中。    public function setPublicedAtAttribute($date)    {        $this->attributes['published_at']=Carbon::createFromFormat('Y-m-d',$date);    }    //查询不超过目前时间的文章内容,以供控制器中的调用    //scope是关键词开始,后面的Published是方法名字    public function scopePublished($query)    {        $query->where('published_at'.'<=',Carbon::now());    }}

验证规则

创建规则文件

php artisan make:request createArticleRequest

该文件本创建再\App\Http\Requests文件夹中CreateArticleRequest.php
打开该文件。

//该方法可用于A发表的文章不能由B来编辑public function authorize(){    //return false    //将false改为true,true表示任何人都可以将表单提交过来    return true;}public function rules(){    return [        //设置规则,如果多个规则的话,用|分割        'title'=>'required',//email min:3等        'content'=>'required',        'published_at'=>'required'    ];}

第二种规则验证方案

public function store(Request $request){    $this->validate($request,[        'title'=>'requested',        'content'=>'requested',        'published_at'=>'required']);    Article::create($request->all());    return redirect('/articles')}

第三种验证规则

public function store(){    //添加分类提交    $input = Input::except('_token');    $rules = [        'nav_name' => 'required',        'nav_url' => 'required',    ];    $message = [        'nav_name.required' => '自定义导航名称不能为空!',        'nav_url.required' => '自定义导航url名称不能为空!',    ];    $validator = Validator::make($input, $rules, $message);    if ($validator->passes()) {        $re = Navs::create($input);        if ($re) {            return redirect('admin/navs');        } else {            return back()->with('errors', '自定义导航填充失败,请稍后重试!');        }    } else {        return back()->withErrors($validator);    }}

编辑(创建资源路由,控制器)

创建一个资源路由

Route::resource('articles','ArticlesController');

创建一个对应的控制器

public function edit($id){    $article=Article::findorFail($id)    return view('article.edit',compact('article'));}public function update(Requests\CreateArticleRequest $request,$id){    $article=Article::findorFail($id)    $article->update($request->all());    return redirect('/articles')}

编辑视图内容

//通过路由中的$article=Articles::findorfail($id),已经获取了文章信息,在通过Form::model绑定,就可以直接在编辑页面自动填充字段相关的已有信息{!! Form::model($article,['method'=>'PATCH','url'=>'/articles'.$article->id]) !!}<div class="form-group"> //添加样式    {!! Form::label('title')!!}    {!! Form::text('title',null,['class'=>'form-control',‘id'=>3])!!} //添加样式,也可传参。</div><!--- content Field ---><div class="form-group">    {!! Form::label('content', 'content:') !!}    {!! Form::textarea('content', null, ['class' => 'form-control']) !!}</div><!--- published_at Field ---><div class="form-group">    {!! Form::label('published_at', ':') !!}    {!! Form::input('date','published_at', date('Y-m-d'), ['class' => 'form-control']) !!}</div>{!! Form::submit('发表文章',['class'=>btn btn-primary form-control'])!!}{!! Form::close()!!}//将错误内容输出@if($errors->any())<ul class="list-group">    @foreach($errors->all() as $error)    <li class="list-group-item list-group-item-danger">{{ $error }}</li>    @endforeach</ul>@endif

1)在视图Views中,@include(‘/’)默认根目录是Views
2)视图中的内容可以优化,通过@include来整合代码
3)可以在Requests\CreateArticleRequest中通过 ifswitch判断语句进行不同条件下的信息验证,例如写文章的验证信息,编辑文章的验证信息。也可以是注册,修改等信息验证。

https://laravelcollective.com/docs/5.4/html

http://www.dahuatu.com/1225/192411.html

https://laravel-china.org/topics/2775/i-would-like-to-ask-the-laravel53-template-form-automatically-generated-token-submitted-to-the-background-how-to-filter-out