gpt4 book ai didi

php - Controller Laravel 5.2 之间的共享方法

转载 作者:可可西里 更新时间:2023-11-01 13:37:35 27 4
gpt4 key购买 nike

在几个 Controller 中,我必须使用相同的方法将结果显示为具有列排序功能的表格:

 public function showSearchResults(Request $req){

$query=Service::where('title', $req->search);

// Columns sorting
if ($req->has('order')){
$order= $req->order=='asc' ? 'asc' : 'desc';
$order_inverse=$req->order=='asc' ? 'desc' : 'asc';
} else {
$order='desc';
$order_inverse='asc';
}

...


$url=$req->url().'?'.http_build_query($req->except('sortby','order','page'));
$results=$query->with('type')->paginate(15)->appends($req->all());


return View::make('services.search_results')
->with('results', $results)
->with('url',$url)
->with('sortby', $sortby)
->with('order', $order)
->with('order_inverse', $order_inverse);

}

在这种情况下避免 DRY 的最佳方法是什么?

最佳答案

在具有特征的 Controller 之间共享方法

第 1 步:创建特征

<?php // Code in app/Traits/MyTrait.php

namespace App\Traits;

trait MyTrait
{
protected function showSearchResults(Request $request)
{
// Stuff
}
}

第 2 步:在您的 Controller 中使用特征:

<?php // Code in app/Http/Controllers/MyController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Traits\MyTrait; // <-- you'll need this line...

class MyController extends Controller
{
use MyTrait; // <-- ...and also this line.

public function getIndex(Request $request)
{
// Now you can call your function with $this context
$this->showSearchResults($request);
}
}

现在您可以以相同的方式在任何其他 Controller 中使用您的 Trait。

重要的是要注意,您不需要在任何地方includerequire Trait 文件,PSR-4 Autoloading负责文件包含。

您也可以像其他人提到的那样使用自定义帮助程序类,但如果您只打算在 Controller 之间共享代码,我建议不要使用它。 You can see how to create custom helper classes here .

关于php - Controller Laravel 5.2 之间的共享方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36842225/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com