一般步骤
- cd到Homestead文件夹下,运行下面的命令
vagrant up #启动虚拟机
vagrant ssh #进入到虚拟机中
- 创建一个新的项目
- 在虚拟机的code文件夹下运行下面的命令
laravel new name
- 配置多站点
修改Homestead.yaml文件,然后重启虚拟机
vagrant provision
基础
向视图传递数据
- 通过with传递
//控制器中
public function add(){
return view('add')->with('name',Auth::user()->name);
}
//视图文件中获取
<p>{{$name}}</p>
- 通过get方式传递数据
//比如url为blog.test/article?id=2
//在控制器中
public function test(Request $request){
$id=$request->input('id');
return view('test')->with('id',$id);
}
//在数据显示界面
<p>{{$id}}</p>
post方式提交表单
//视图中,其中action的值为路由
<form method="POST" action="addArticle">
@csrf
<div class="form-group row">
<label for="title" class="col-md-2 col-form-label text-md-right">{{ __('题目') }}</label>
<div class="col-md-8">
<input id="title" type="text" class="form-control" name="title" placeholder="请输入文章题目" required autofocus>
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-8 offset-md-2">
<button type="submit" class="btn btn-primary">
{{ __('提交') }}
</button>
</div>
</div>
</form>
//控制器中
public function addArticle(Request $request){
$title = $request->input('title');
$author = $request->input('author');
$article = $request->input('article');
return redirect('/');//重定向至首页
}
表单验证
$title=$request->input('title');
$author=$request->input('author');
$message=$request->input('message');
$date=$request->input('date');
//表单验证
//控制器中
$validatedData = $request->validate([
'title' => 'required|max:50',
'author'=>'required',
'message' => 'required',
'date'=>'required',
],[
'title.required'=>'文章题目不能为空',
'title.max'=>'题目不能超过25字',
'author.required'=>'作者不能为空',
'message.required'=>'内容不能为空',
'date.required'=>'发送时间不能为空',
]);
通过模型连接数据库
//创建一个模型
php artisan make:model Flight
//在模型中写
protected $table = 'articles';//选择的表
protected $fillable = ['id','title','message','author','date','ip'];//表中要用到的字段
protected $primaryKey='id';//设置主键
public $timestamps = false;//时间戳禁用
//如何使用模型
//第一步,在控制器的开始引入模型
use App\Article;
//第二步在具体的方法中编写代码
//查询数据
//在控制器中
$article = new Article();
$title = Article::all();
return view('test')->with('title',$title);
//在视图中
@foreach($title as $value)
<p>{{$value['title']}}</p>
@endforeach
//插入数据
$article = new Article();
$article->title = $request->title;
$article->save();
//更新数据
App\Flight::where('id', 1)
->update(['title' => '更新后的']);
//删除数据
$article = Article::find(1);
$article->delete();
分页
//控制器中
$article = new Article();
//$title = Article::all();
$title = Article::paginate(1);
return view('test')->with('title',$title);
//视图中
@foreach($title as $value)
<p>{{$value['title']}}</p>
@endforeach
<nav>
<ul class="pagination">
<li class="page-item">{{ $title->links() }}</li>
</ul>
</nav>
中级
用户权限管理
方法一:Gate和Policy
- 简单说一下,权限管理就是一种制定规则和实施规则的过程,Gate和Policy负责制定规则,控制器、路由、视图负责实施规则
- 基本使用
- 使用闭包创建一个基本的规则
//app/Providers/AuthServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
// 'App\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
//创建一个规则,返回true就代表有权限,返回false代表没有权限
Gate::define('admin-manage',function(){
if(Auth::user()->role === 'admin'){
return true;
}
return false;
});
}
}
- 使用Policy创建一个规则
//命令行运行 php artisan make:policy PostPolicy
//app/Policies/PostPolicy
//创建一个新的方法
public function admin_manage(){
if(Auth::user()->role === 'admin'){
return true;
}
return false;
}
//AuthServiceProvider.php
Gate::define('admin-manage','App\Policies\AdminPolicy@admin_manage');
- 控制器中判断用户是否有权限干啥啥啥
//web.php
Route::get('/admin','ViewController@admin')->name('admin');
//ViewController.php
//特别注意:Gate的路径是下边这个,千万别写错了
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Auth;
//如果用户有权限则可以访问,没有权限就返回404页面
public function admin(){
if(Gate::allows('admin-manage',Auth::user())){
return view('admin/dashboard');
}
abort(404);
}
- 视图中判断有权限就显示啥啥啥
//app.blade.php
@can('admin-manage',Auth::user())
<li class="nav-item">
<a class="nav-link" href="{{ route('admin') }}">管理中心</a>
</li>
@endcan
方法二:中间件
- 创建
php artisan make:middleware CheckAge
- 注册中间件
//在app/Http/Kernel.php中的$routeMiddleware那一块中,最后加入下面的代码
'admin'=> \App\Http\Middleware\Admin::class,//其中admin为自定义的中间件名,后边那一堆为中间件的路径
- 中间件的文件中修改成以下代码
public function handle($request, Closure $next)
{
if (!Auth::check()) {
return redirect()->route('login'); //没登录时重定向到登录页面
}
return $next($request);
}
- 中间件的使用
//在路由中
Route::any('/add','AddController@add')->middleware('admin');