路由使用中间件
->middleware('auth')
控制器中使用中间件
public function __construct()
{
$this->middleware(['auth'], ['except'=>['index']]);
}
控制器中字段验证
$request->validate([
'title' => 'required|between:2,80',
],[
'title.*' => __('标题2-80字'),
]);
控制器中使用授权策略
$this->authorize('manage', $group);
判断
Auth::user()->can('view', $note)
返回重定向
// 返回上一页
return redirect()->back()->with(['msg'=>__('Successfully exited'), 'alert'=>'success']);
// 跳转到指定路由页面
return redirect()->route('group.show', $group->slug)->with(['msg'=>__('Non members cannot post'), 'alert'=>'danger']);
判断请求类型
if($request->isMethod('post')){
// 接收表单提交
}else{
return view('article.create');
}
引入登录Auth
use Illuminate\Support\Facades\Auth;
引入时间Carbon
use Carbon\Carbon;
引入Storage
use Illuminate\Support\Facades\Storage;
文件存储public/uploads
filesystems.php
'public' => [
'driver' => 'local',
'root' => public_path('uploads'),
'url' => '/uploads',
'visibility' => 'public',
],
图片上传
$folder = Request()->folder ?? 'image';
if ($request->hasFile('file')) {
$file = $request->file('file');
$disk = Storage::disk('public');
$extension = $file->getClientOriginalExtension();
if(!in_array($extension,['jpg', 'jpeg', 'png', 'webp' ,'gif']))return response()->json(['state' => 'error', 'url'=>__('Picture format error!')]);
if($file->getSize()/1024/1024 > 2)return response()->json(['state' => 'error', 'url'=>__('The picture is too big!')]);
$fileName = md5($file->getClientOriginalName().time().rand()).'.'.$extension;
$filepath = '/'.$folder.'/'.Auth::user()->id.'/'.$fileName;
$bool = $disk->put($filepath,file_get_contents($file->getRealPath()));
if ($bool) {
$src = $disk->url($filepath);
return ['url'=>[env('APP_URL').$src]];
}
return response()->json(['state' => 'error', 'url' => __('Picture saving failed!')]);
}
return response()->json(['state' => 'error']);
返回异常信息
throw new Exception("不存在或被隐藏", "404");
获取搜索结果
class SearchController extends Controller
{
public function lists(Request $request)
{
if(!$request->keyword) {
return ['status'=>'404'];
}
$where = function ($query) use ($request) {
$keyword = "%" . $request->keyword . "%";
$query->where('title', 'like', $keyword);
};
$articles = \DB::table('articles as a')->select('a.id','a.alias','a.title','a.created_at','a.user_id', \DB::raw("'article' as type"))->where($where);
$questions = \DB::table('questions as q')->select('q.id','q.alias','q.title','q.created_at','q.user_id', \DB::raw("'question' as type"))->where($where);
$result = $articles->union($questions)
->orderByDesc('created_at')
->paginate(30);
foreach($result as $re){
$re->created_time = Carbon::parse($re->created_at)->diffForHumans();
}
// 获取结果列表
return $result;
}
}
人性化时间
$post->created_at->diffForHumans()
软删除
use Illuminate\Database\Eloquent\SoftDeletes;
class Post extends Model
{
use SoftDeletes;
// ……
}
观察者
use App\Observers\PostObserver;
public static function booted()
{
self::observe(PostObserver::class);
}
获取当前路由名称
Route::currentRouteName()