Froms的使用实例

视图模板

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值