Laravel 使用小技巧 整理

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'));
    }

 

posted @ 2018-02-03 14:00  丶老中医  阅读(505)  评论(0编辑  收藏  举报
一切已经开始©2018 丶老中医