Laravel的社区生态
中文社区(http://laravel-china.org)
5.4中文文档(http://d.laravel-china.org/docs/5.4)
Laravel源码地址(http://github.com/laravel/laravel)
数据填充包(http://github.com/fzaninotto/Faker)
与其他框架的优势
1、laravel包含的功能更为丰富:队列,搜索,数据库迁移,定时脚本
2、laravel使用了丰富的第三方包
Laravel的安装
1、 安装环境的要求:PHP>=5.6.4 开启:openssl,PDO,mbstring,tokenizer,xml
2、 安装composer:https://pkg.phpcomposer.com/#how-to-install-composer配置中国镜像
3、 用composer安装laravel:composer create-project laravel/laravel laravel54 “5.4.*”
4、 使用laravel框架之前先给php和apache做相关配置,避免后续麻烦:
5、 php.ini
6、 extension=php_openssl.dll
7、 extension=php_pdo_mysql.dll
8、 extension=php_mbstring.dll
9、 extension=php_fileinfo.dll
10、 extension=php_curl.dll
11、 httpd.conf
12、 LoadModule deflate_module modules/mod_deflate.so
13、 LoadModule rewrite_module modules/mod_rewrite.so
14、 配置完毕以上,重启apache服务。
Laravel的路由
1、 Route::get();//获取资源
2、 Route::post();//创建资源
3、 Route::put();//更新资源
4、 Route::patch();//增亮更新资源
5、 Route::delete();//删除资源
6、 Route::options();//查询资源支持哪些方法
7、 Route::group();//路由分组
Route::group(['prefix'=>'posts'],function (){
Route::get('/','AppHttpControllersPostController@index');
});
8、 Route::any();//支持所有的路由
9、 Route::match();//可以指定支持的路由
如果支持的是put,那么表单的格式如下
<form action=”/posts” method=”POST”>
{{ method_field(“PUT”) }}
</form>
数据表的生成
Php artisan make:migration create_posts_table//创建表
Php artisan migrate//执行数据
Php artisan migrate:rollback//数据回滚操作
//执行数据时出错需在appprovidersappserviceprovider.php的boot方法中输入:
Schema::defaultStringlength(191);
Tinker的使用
1、创建文章:
> $post = new AppPost();
AppPost {#653}
> $post->title="this is post1";
"this is post1"
> $post->content="this is content";
"this is content"
> $post->save();
true
2、设置时区:config/app.php
'timezone' => 'Asia/Shanghai',
重启tinker
3、时间格式的转变:
应在渲染时间中加入:{{$post->created_at->toFormattedDateString()}}
填充内容
Databasefactoriesmodelfactory.php中输入
$factory->define(AppPost::class,function (FakerGenerator $faker) {
return [
'title'=>$faker->sentence(6),//6个字符
'content'=>$faker->paragraph(10),//10个句子
];
});
php artisan tinker
>>> factory(AppPost::class,20)->create();//创建20条记录,并放入数据库
分页
$posts =Post::orderBy('created_at','desc')->paginate(6);
在index.blade.php的列表页中找到分页,直接替换成 {{$posts->links()}} 即可实现分页功能。
{{ str_limit($post->content,100,'...') }}//内容展示100个字符,超出的显示…
当创建文章点击提交后会报错,需在form表单中输入:{{ csrf_field() }} CSRF是跨站请求伪造
插入富文本编辑器
新建ylaravel.js,输入
var editor = new wangEditor('content');
editor.create();
在main.blade.php引入
<script src="/js/ylaravel.js"></script>
插入富文本编辑器后创建的文章会出现<p></p>标签,此时:
需将index.blade.php中的
{{str_limit($post->content,100,'...')}}
修改成:
{!! str_limit($post->content,100,'...') !!}
实现中文报错
Create.blade.php 中的提交按钮前插入
@if(count($errors)>0)
<div class="alert alert-danger" role="alert">
@foreach($errors->all() as $error)
<li> {{$error}}</li>
@endforeach
</div>
@endif
public function store() {
//验证
$this->validate(request(),[
'title'=>'required|string|max:100|min:5',
'content'=>'required|string|min:10',
]);
//逻辑
$post = Post::create(request(['title','content']));
//渲染
return redirect("/posts");
}
图片上传
public function imageUpload(Request $request) {
$path = $request->file('wangEditorH5File')->storePublicly(md5(time()));
return asset('storage/'.$path);
//dd(request()->all());
}
打开php.ini中的php_fileinfo
Main.blade.php
Ylaravel.js
<meta name="csrf-token" content="{{ csrf_token() }
var editor = new wangEditor('content');
editor.config.uploadImgUrl = "/posts/image/upload";
editor.config.uploadHeaders = {
'X-CSRF-TOKEN' : $('meta[name="csrf-token"]').attr('content')
};
editor.create();
实现编辑功能
<form action="/posts/{{$post->id}}" method="POST">
{{method_field("PUT")}}
{{csrf_field()}}
public function edit(Post $post) {
return view('post/edit',compact('post'));
}
实现修改功能
public function update(Post $post) {
//验证
$this->validate(request(),[
'title'=>'required|string|max:100|min:5',
'content'=>'required|string|min:10',
]);
//逻辑
$post->title = request('title');
$post->content = request('content');
$post->save();
//渲染
return redirect("/posts/{$post->id}");
}
在编辑页面edit.blade.php的提交按钮前添加
@if(count($errors)>0)
<div class="alert alert-danger" role="alert">
@foreach($errors->all() as $error)
<li> {{$error}}</li>
@endforeach
</div>
@endif
为了方便,可以将错误提示单独放入layout文件夹中error.blade.php,在edit.blade.php中只需要引入即可:@include(‘layout.error’)
实现删除操作
Route::get('/{post}/delete','AppHttpControllersPostController@delete');
public function delete(Post $post) {
//TODO:用户的权限验证
$post->delete();
return redirect('/posts');
}