使用traits是 PHP 中 OOP(面向对象编程)和 [SOLID 原则] 的最佳实践之一

什么是 traits

Traits是一种在 PHP 等单继承语言中重用代码的机制。

特征旨在通过使开发人员能够在生活在不同类层次结构中的几个独立类中自由地重用方法集来减少单继承的一些限制。

简单来说,Traits是一组要包含在另一个类中的方法。您可以轻松地将该方法重用于另一个类。特征是一次又一次地编写相同的代码

1.创建 Traits

app在名为的目录中创建一个文件夹,Traits并在其中创建ImageTrait

verifyAndUpload()让我们用函数创建一个新的 trait

<?php

namespace App\Traits;

use Illuminate\Http\Request;

trait ImageTrait {

    /**
     * @param Request $request
     * @return $this|false|string
     */
    public function verifyAndUpload(Request $request, $fieldname = 'image', $directory = 'images' ) {

        if( $request->hasFile( $fieldname ) ) {

            if (!$request->file($fieldname)->isValid()) {

                flash('Invalid Image!')->error()->important();

                return redirect()->back()->withInput();

            }

            return $request->file($fieldname)->store($directory, 'public');

        }

        return null;

    }

}

2.创建将使用 ImageTrait 的控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Item;

class ItemController extends Controller
{
     /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('imageUpload');
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $input = $request->all();

        $input['image'] = '';

        Item::create($input);

        return back()
            ->with('success','record created successfully.');

    }
}

3.在控制器上插入并使用 ImageTrait

use App\Traits\ImageTrait;
use ImageTrait;
$input['image'] = $this->verifyAndUpload($request, 'image', 'images');

完整代码


<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Item;
use App\Traits\ImageTrait;

class ItemController extends Controller
{
    use ImageTrait;
     /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('imageUpload');
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $input = $request->all();

        $input['image'] = $this->verifyAndUpload($request, 'image', 'images');

        Item::create($input);

        return back()
            ->with('success','record created successfully.');

    }
}

···

我们已经成功创建并应用了 Traits!您现在可以在您的项目中使用它并提高代码的可读性和稳定性!
点赞(0)

评论列表 共有 0 评论

暂无评论