Laravel 使用小技巧 整理
Route
有时,您可能需要注册一个响应多个HTTP动词的路由。您可以使用 match 方法这样做。或者,您甚至可以注册一条使用任何方法响应所有HTTP动词的路由:
Route::match(['get', 'post'], '/', function () { // }); Route::any('foo', function () { // });
偶尔,您可能需要指定一个route参数,但是要使该路由参数的存在成为可选的。你可以这样做吗?在参数名后面标记。
确保给路线的相应变量一个默认值:
Route::get('user/{name?}', function ($name = null) { return $name; }); Route::get('user/{name?}', function ($name = 'John') { return $name; });
正则表达式约束:
Route::get('user/{name}', function ($name) { // })->where('name', '[A-Za-z]+'); Route::get('user/{id}', function ($id) { // })->where('id', '[0-9]+'); Route::get('user/{id}/{name}', function ($id, $name) { // })->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
全局约束
您应该在您的RouteServiceProvider的引导方法中定义这些模式:
/** * Define your route model bindings, pattern filters, etc. * * @return void */ public function boot() { Route::pattern('id', '[0-9]+'); parent::boot(); }
Controllers
如果您想要定义一个只处理单个动作的控制器,您可以在控制器上放置一个调用方法:
<?php namespace App\Http\Controllers; use App\User; use App\Http\Controllers\Controller; class ShowProfile extends Controller { /** * Show the profile for the given user. * * @param int $id * @return Response */ public function __invoke($id) { return view('user.profile', ['user' => User::findOrFail($id)]); } }
在为单个动作控制器注册路由时,您不需要指定方法:
Route::get('user/{id}', 'ShowProfile');
Request Files
获取上传文件:
$file = $request->file('photo'); $file = $request->photo;
您可以使用hasFile方法来确定一个文件是否存在于请求中:
if ($request->hasFile('photo')) { // }
验证成功上传:
if ($request->file('photo')->isValid()) { // }
文件路径和扩展:
$path = $request->photo->path();
$extension = $request->photo->extension();
其他文件的方法,在UploadedFile实例中有许多其他可用的方法。有关这些方法的更多信息,请参阅类的API文档:http://api.symfony.com/3.0/Symfony/Component/HttpFoundation/File/UploadedFile.html
Validation
编写验证逻辑:
/** * Store a new blog post. * * @param Request $request * @return Response */ public function store(Request $request) { $validatedData = $request->validate([ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]); // The blog post is valid... }
停止第一次验证失败:
$request->validate([ 'title' => 'bail|required|unique:posts|max:255', 'body' => 'required', ]);
在本例中,如果title属性的惟一规则失败,则不会检查max规则。规则将按照所分配的顺序进行验证。
嵌套的属性的验证:
$request->validate([ 'title' => 'required|unique:posts|max:255', 'author.name' => 'required', 'author.description' => 'required', ]);
Json_encode
我们知道, 用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的。
echo json_encode("中文", JSON_UNESCAPED_UNICODE);
Json在5.4还加入了: JSON_BIGINT_AS_STRING, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES等选项
Laravel Model 设置table名
protected $table='tests';
或者
public function __construct(array $attributes = []) { parent::__construct($attributes); $this->setTable(config('eshow.table_names.api_users')); }