Laravel 8 - Traits(3 个简单步骤)
在 PHP 中,使用traits`Objective-Object` 是与面向对象编程 (OOP) 和 SOLID 原则并列的最佳实践之一。( https://dev.to/dalelantowork/solid-principles-object-oriented-programming-in-php-3p3e )
什么是特性(Trait)?
特性(Trait)是像 PHP 这样的单继承语言中实现代码重用的机制。
特性旨在减少单一继承的一些限制,使开发人员能够在不同的类层次结构中的多个独立类中自由地重用方法集。
简单来说,特性(Traits)是一组你想在另一个类中包含的方法。你可以轻松地将这些方法复用到另一个类中。特性可以避免重复编写相同的代码。
让我们开始创建我们自己的自定义特性吧!
我们将创建一个特性ImageTrait,并在该特性中编写图像上传的代码。
每当我们需要上传图片时,都可以使用 ImageTrait 特性。
步骤 1:创建 Traits 文件和 ImageTrait
app在名为“目录”的目录中创建文件夹Traits,并在该文件夹中创建ImageTrait
让我们创建一个带有verifyAndUpload()函数的新特性。请粘贴以下代码:
app/Traits/ImageTrait.php
<?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 的控制器
粘贴以下代码。
app/Http/Controllers/ItemController.php
<?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
粘贴 ImageTrait 的使用示例。
app/Http/Controllers/ItemController.php
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.');
}
}
文章来源:https://dev.to/dalelantowork/laravel-8-traits-4ai太棒了!我们已经成功创建并应用了 Traits!现在您可以在项目中使用它,提高代码的可读性和稳定性!
