关闭

laravel学习笔记二

标签: laravel
272人阅读 评论(0) 收藏 举报
分类:

一、Eloquent

make:model name  会自动对应到model的tablename

php artisan tinker,进入一个php解释器交互界面。

$a= new App\AA;打开AA类。

$a->title="title";

$a->time=Carbon\Carbon::now();

$a->save();//写入数据库

$a->toArray();

$first=App\Articl::find(1);

$sencond=App\Article:where('columea','=','a')->get()->get();

$sencond=App\Article:where('columea','=','a')->get()->first();

$a=App\Article::create(['abc'=>'a','bca'='b']);//直接创建不用save,需要在article.php中添加$fillable=['abc','bca']就可以直接创建了。

$a->update(['abc'=>'b']);


二、建立一个blog全部过程

Route::get('/articles','ArticlesController@index');

Route::get('/articles/{id}','ArticlesController@show');//变量放在大括号中

php artisan make ::controller ArticlesController;

public function index()

{

$articles = Article::all();//要添加use App\Article,即可使用ArticleModel的方法

return view('articles.index',compact('articles'));

}

public function show($id)

{

$a = Article::find($id);

$a = Article::findOrFail($id);//如果找不到直接fail掉

//也可以这样实现

if(is_null($a))

abort('404');

return view('articles.show',compact('a'));//之后需要建立一个articles/show.blade.php文件

}

新建页面文件,articles/index.blade.php:

@extend('app')

@section('content')

<h1>Articles</h1>

<hr>

@foreach($articles as $article)

<h2><a href="/articles/{{$article->id}}">{{$article->title}}</h2>

<article>

<div class="body">

{{$article->content}}

</div>

</article>

@endeach

@stop

@content

三、Form

使用illuminate/html中的Form包

1.首先下载:composer require illuminate/html

2.配置:config----app.php

'providers' 这个数组中illuminate/html\HtmlServiceProvider::class

'aliases' 快捷方式:'form'=illuminate/html\FormFacade::class

3.POST路由

在routes.php中增加Route::post('/articles','ArticlesController@store');

4.view的php界面中 Form创建:

{{!!Form::open(['url'=>'articles'])!!}}

<div class="form-group">

{{!!Form::label('name')!!}}

{{!!Form::text('name',null,['class'=>'form-control','id'=>'id'])!!}}

</div>


<div class="form-group">

{{!!Form::label('name')!!}}

{{!!Form::textarea('name',null,['class'=>'form-control','id'=>'id'])!!}}

</div>


{{!!Form::submit('发表文章',['id'=>'idnumber'])!!}}

{{!!Form::close()!!}}


5.在controller的store方法中:

public function store(Request $request)

{

dd($request->all());

//dd($request->get('title'));

//接受post,存入数据库,重定向三步

$input=$request->all();

$input['published_at']=Carbon::now();

Article::create($input);

return redirect('/articles');

}

6.index方法修改

{

//$articles = Article:all();

$articles = Article::latest()->get();//按照新发表的顺序排序

}

四、queryScope和setAttribute用法

1.改变文章发布生效时间,在controller中:

public function store(Request $request)

{

dd($request->all());

//dd($request->get('title'));

//接受post,存入数据库,重定向三步

//

Article::create($request->all());

return redirect('/articles');

}

2.在view中添加:

<div class="form-group">

{{!!Form::label('published_at')!!}}

{{!!Form::input(''date','published_at',date('m-d-Y'),['class'=>'form-control','id'=>'id'])!!}}

</div>

3.在Article的Model文件中增加时分秒:

public function setPublishedAtAttribute($date)

{

$this->attributes['published_at']= Carbon::createFromFormat('Y-m-d',$date);

}

命名方式:setYOURNAMEAttribute,这样在数据存入数据库之前,会做一个相应的预处理。

4.将发布时间在未来的文章隐藏显示:

public function index()

{

$articles = Article::latest()->where('published_at','<',Carbon::now())->get();

或者:

$articles = Article::latest()->published()->get();//需要在Article类中增加一个scopePublished()方法

return view('articles.index',compact('articles'));

}

5.增加scopePublished()方法

public function scopePublished($query)

{

$query->where('published_at','<',Carbon::now());

}

6.Carbon的一些方法

$cb=$article->created_at默认的属性是作为Carbon对象存在的

$cb->year;

$cb->diffForHumans();//多少分钟之前,很强大

要将published_at作为Carbon对象使用,需要在Articles文件中为它设置属性:

protected $dates = ['published_at'];


五、表单验证

1.使用request方法:

make request命令

php artisan make:request CreatArticleRequest//在app\Requests下生成相应的文件

主要有两个函数:authorize(),rules()

public function rules()

{

return[

'title'=>'required | min:3 | max:5',

'content'=>'required',

'published_at'=>'required'

];

}

public function store(Requests\CreatArticleRequest$request)

{

Article::create($request->all());

return redirect('/articles');

}

这样验证不成功的话store方法是不会执行的。如果想要定位错误,需要继续修改

<div class="form-group">

{{!!Form::label('published_at')!!}}

{{!!Form::input(''date','published_at',date('m-d-Y'),['class'=>'form-control','id'=>'id'])!!}}

</div>

@if($error->any())

@foreach($errors->all() as $error)

<li class="list-group-item list-group-item-danger"> {{$error}}</li>

@endforeach

@endif


2.使用Request的validate()方法

public function store(Request $request)

{

$this->validate($request,['title'=>'required','content'=>'required']);

Article::create($request->all());

return redirect('/articles');

}


六、编辑 Form-Model-Binding

php artisan route:list//查看路由

Route::resource('articles','ArticlesController');//批量的生成路由

Route::get('/articles/{id}/edit','ArticlesController@edit');

Route::post('');


controller中的edit()方法:

public function edit($id)

{

$article= Article::findOrFail($id)

return view('articles.edit',compact($article));

}

新建view文件:

@section('content')

{!! Form::model($article,['method'=>'PATCH']  !!}// Form-Model-Binding,这样将Article的属性绑定到FORM内容中

//与创建页面时相同

@stop


更新controller@update()

public function update(Request $request, $id)

{

$article= Article::findOrFail($id);

$article->update(request->all());

return view('/articlest');

}


增加表单验证同上。

@include(errors/list)  //默认resources\views文件夹下,便于维护


七、用户注册和登陆

laravel5.1中去除了Authetication模块,需要自己实现

1.首先在Routes.php 增加GET和POST两个login,GET和POST两个register,一个GET的logout。

2.在Controller中查看Auth相关方法

3.实现views的auth.register, auth.login等界面

4.获取登陆的用户信息:1.Controller中Auth::user()2.视图文件 {{Auth::User()->name}};


八、Eloquent Relationship

一对一,一对多,多对多。

这里要建立文章和用户的对应关系。

1.修改database\migrations的migrations文件中的up方法,增加一些数据库表属性。

$table->integer('user_id')->unsigned();

$table->foreign('user_id')->references('id')->on('user');//创建外键,限制为仅仅是user中的id

2. php artisan migrate:refresh //会将之前的数据抹掉

所以需要新建一个: php artisan make:migration add_user_id_column_to_articles --table=articles





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:26776次
    • 积分:536
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条