Laravel框架的安装见[windows下安装Laravel5]
1.Laravel路由
大多数路由都将在 app/Http/routes.php 中定义,大多数基本的 Laravel 路由都只接受一个 URI 和 一个 闭包(Closure) 参数。
Route::get('/','WelcomeController@index')
Route: 声明一个路由;
get:即定义一个GET路由,除get外,还有post、put、delete路由;
/:即指向网站
WelcomeController@index:前面是控制器,后面是调用控制器中的方法
2.返回视图
视图文件在resources/views/welcome.blade.php
public function index(){
return view('welcome');//显示welcome视图
}
返回控制器的某个视图
return view('pages.index');
return view('pages/index');
3.定义路由
//单项定义
Route::get('/contact','WelcomeController@contact');
//统一定义(resource),会生成7中restful风格的action
Route::resource('articles', 'ArticlesController');
//子文件夹路由
Route::resource('admin/user', 'admin\UserController');
4.创建控制器
php artisan make:controller PagesController
在app/Http/Controllers/下生成文件,同时生成方法index()、create()、store()、show($id)、edit($id)、update($id)及destroy($id)
//不生成方法
php artisan make:controller PagesController --plain
//在某个文件夹下生成控制器
php artisan make:controller admin/PagesController
5.创建模型
//在app/下生成User.php
php artisan make:model User
/*
*修改模型目录,注意namespace
*在app/Models/下生成对应文件
*/
php artisan make:model Models/User
//注意设置
protected $fillable = [表字段];
6.操作migration
php artisan make:migration create_users_table
//参数
--create=users, 生成一个新表
--table=users,更新表结构
生成目录,database/migrations/
//执行migration
php artisan migrate
//回滚上一个migration
php artisan migrate:rollback
//执行回滚所有迁移
php artisan migrate:reset
//执行回滚所有迁移并重新执行
php artisan migrate:refresh
8.关联关系
基本可以分为:一对一、一对多及多对多
public function articles(){
//这是一个hasMany关联关系
return $this->hasMany('App\Article');
}
//这是一个hasOne关联关系
public function user(){
return $this->belongsTo('App\User');
}
当然也可以指定关联字段
public function getCategory(){
return $this->hasOne('App\Models\Category','id','category_id');}
视图层调用:$model->getCategory;返回一个查询对象object
9.外键
新建migration迁移文件,添加字段和外键
//添加外键,做级联删除
$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade');
});
10.密码处理
用户密码必须要进行加密操作,bcrypt() 方法也可以用 Hash::make() 来替代
11.表单验证
1.自定义验证类
php artisan make:request UpdateUPostRequest
生成文件位于 app\Http\Requests\ 下类里面有两个方法: authorize() 和 rules(),authorize() 方法验证用户是否有权限执行此FormRequest 类或者方法.
另外是rules()方法
publicfunction rules()
{
return[
'title'=>'required|min:3',
'content'=>'required',
];
}
//使用方法:
publicfunction store(UpdatePostRequest $request){
Article::create($request->all());
return redirect('articles');
}
2.调用validator()方法
控制器中调用
$this->validate($request,['title'=>'required|unique|max:255','body'=>'required',]);
12.表单模型绑定
表单模型绑定
{!!Form::model($article,['method'=>'PATCH','action'=>['ArticlesController@update', $article->id]])!!}
13.中间件 middleware
中间件文件位于 app/Http/Middleware/ 目录下
可以通过app/Http/Kernel.php 注册中间件,每一个请求都要执行的添加到 $middleware中,而只在特殊位置需要的添加到$routeMiddleware 中。
自定义中间件步骤:
1. php artisan make:middelware Demo
2. 在目录下app/Http/Middleware/下打开Demo.php,修改handle()函数
3. 在app/Http/Kernel.php中注册Demo中间件,注意,如果每一个请求都要执行该中间件,注册在$middleware, 特殊的注册在 $routeMiddleware.
例如:
public function handle($request, Closure $next)
{
if($request->is('articles/create') && $request->has('foo')){
return redirect('articles');
}
return $next($request);
}
14.简单权限控制
控制器中使用中间件,可以在路由文件中指定middleware,也可以在控制器的构造函数中指定。
Route::get('profile',['middleware'=>'auth','uses'=>'UserController@showProfile' ]);
或者
public function __construct(){
//除了主页之外
$this->middleware('auth', ['except' => ['index','show']]);
//只有发布页
//$this->middleware('auth', ['only' => 'create']);
}
15.flash messaging
Session::flash() 方法是暂存数据的一种方法,它只在下次请求的时候有效。也就是说下次请求完成之后,该数据即消失。
\Session::flash('success','文章发布成功');
//在布局文件中判断和显示
@if(Session::has('success'))
<div class="alert alert-success">{{Session::get('success')}}</div>
@endif
@if(Session::has('success'))
<div style='width:100%; background:#CCFFCC' class="alert alter-success">{{Session::get('success')}}</div>
@endif
//引入jQuery CDN后,设置显示时间
<script type="text/javascript">
$('div.alert').not('.alert-important').delay(3000).slideUp(300);
</script>
//文件重用
在views文件夹下新建 partials文件夹,创建 flash.blade.php
@if(Session::has('success'))
<div style='width:100%; background:#CCFFCC; text-align:center;' class="alert alter-success">{{Session::get('success')}}</div>
@endif
在main.blade.php中引入即可,@include('partials.flash')
另一种方法是composer require laracasts/flash
还可以使用 Bootstrap 的 modal() 方法
16.请求 Request
use Request;
$name = Request::input('name');
//依赖注入,获取请求实例
public function store (Request $request){$name=$request->input('name'); //
}
//取得特定输入数据,若没有则取得默认值
$name = Request::input('name','Sally');
//确认是否有输入数据
if(Request::has('name')){ //}
//取得所有发出请求时传入的输入数据
$input=Request::all();
//取得部分发出请求时传入的输入数据
$input=Request::only('username','password');$input=Request::except('credit_card');
//如果是「数组」形式的输入数据,可以使用「点」语法取得数组:
$input=Request::input('products.0.name');
17.引入身份验证类Auth
user Auth;
当前用户 Auth::user()->id;
18.数据查询
//数据查询
$users=User::all();
$user=User::find(1);
//有时, 您可能想要在找不到模型数据时抛出异常,通过 firstOrFail 方法。
$model=User::findOrFail(1);
$model=User::where('votes','>',100)->firstOrFail();