在几个控制器中,我必须使用相同的方法将结果显示为具有列排序功能的表:
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的最佳方法是什么?
答案 0 :(得分:13)
第1步:创建特征
shinyUI(
navbarPage("navbar",
tabPanel(strong("Buscador"),value="panel2",
tags$head(tags$style(HTML(".multicol{font-size:12px;
height:auto;
-webkit-column-count: 2;
-moz-column-count: 2;
column-count: 2;
}"))),
fluidRow(column(4,
strong(p("Indexada en")),
tags$div(align = "left",
class = "multicol",
checkboxGroupInput("index",
label=NULL,
choices = list("PubMed©" = 3,
"Embase©" = 4,
"CINAHL©" = 5,
"Cuiden©" = 6,
"Scopus©" = 7,
"BVS-Lilacs©" = 8))
)))))
步骤2: <?php // Code in app/Traits/MyTrait.php
namespace App\Traits;
trait MyTrait
{
protected function showSearchResults(Request $request)
{
// Stuff
}
}
控制器中的特征:
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);
}
}
您的Trait。
请务必注意,您无需在任何地方use
或include
使用特征文件,PSR-4 Autoloading负责处理文件。
您也可以像其他人提到的那样使用自定义帮助程序类,但如果您只打算在控制器之间共享代码,我建议不要使用它。 You can see how to create custom helper classes here
答案 1 :(得分:2)
您可以使用特征(如建议使用ventaquil),也可以创建自定义helpers文件并在其中添加帮助。
之后,您将能够像任何其他类Laravel helper一样使用任何类(控制器,模型,自定义类,命令等)中的助手。
答案 2 :(得分:0)
使用特征?更多信息请访问:http://php.net/manual/en/language.oop5.traits.php
答案 3 :(得分:0)
您可以在app目录中创建帮助文件。例如。 MethodHelper.php
在此文件中,您可以在任何地方提及所需的方法。 例如,
<?php namespace App;
class MethodHelper
{
public static function reusableMethod()
{
//logic
}
}
您可以在任何地方使用此方法,方法是使用命名空间并调用方法。 在上面例如。 命名空间将是:
方法调用函数如下所示:
MethodHelper::reusableMethod();
您也可以根据功能要求发送参数。 在你的例子中。你可能有
public function showSearchResults(Request $req){
//
}
而不是reusableMethod()。 你的电话将是:
MethodHelper::showSearchResults($req);