use*_*668 5 php laravel laravel-5
在几个控制器中,我必须使用相同的方法将结果显示为具有列排序功能的表:
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);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下避免DRY的最佳方法是什么?
hei*_*ian 13
第1步:创建特征
<?php // Code in app/Traits/MyTrait.php
namespace App\Traits;
trait MyTrait
{
protected function showSearchResults(Request $request)
{
// Stuff
}
}
Run Code Online (Sandbox Code Playgroud)
第2步: use
控制器中的特征:
<?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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以use
以相同的方式在任何其他控制器中使用Trait.
重要的是要注意您不需要include
或require
任何地方的Trait文件,PSR-4自动加载负责文件包含.
您也可以像其他人提到的那样使用自定义帮助程序类,但如果您只打算在控制器之间共享代码,我建议不要使用它. 您可以在此处查看如何创建自定义帮助程序类.