TAY
笔记 · · 阅读 279

laravel 常用代码汇总

路由使用中间件

->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()

目录