Php 模型/控制器变量-Laravel
我一直在我的控制器中使用查询生成器,但是我想使用雄辩和查询生成器。我想知道在两者之间传递变量的最佳实践。我已经看了文档,但仍然有问题 以下是我在控制器中的操作方式:Php 模型/控制器变量-Laravel,php,laravel-4,eloquent,Php,Laravel 4,Eloquent,我一直在我的控制器中使用查询生成器,但是我想使用雄辩和查询生成器。我想知道在两者之间传递变量的最佳实践。我已经看了文档,但仍然有问题 以下是我在控制器中的操作方式: public function getRetailers($city) { $locations = DB::table('retailers_listings') ->orderBy('country', 'asc') ->Where('city', $city)
public function getRetailers($city) {
$locations = DB::table('retailers_listings')
->orderBy('country', 'asc')
->Where('city', $city)
->get();
$this->layout->header = $city;
$content = View::make('retailers.stores')
->with('header', $this->layout->header)
->with('store_listings', $locations)
if (Request::header('X-PJAX')) {
return $content;
} else {
$this->layout->content = $content;
}
}
我将如何在一个模型中以雄辩的方式完成上述工作?当变量$city从视图中进入时,我如何将其传递给模型。如果能提供比文档更深入的建议,那就太好了 将模型作为依赖项注入控制器中 在这个例子中,为了简单起见,我引用了一个列表模型
class HomeController extends BaseController {
protected $listing;
// Type hint your model. This is laravels automatic resolution
// It will automatically inject this dependency for you
public function __construct(Listing $listing)
{
$this->listing= $listing;
}
public function index()
{
$listings = $this->listing->whereTitle(Input::get['title'])->get();
return View::make('listing' , compact($listings));
}
}
更好的方法是使用可以让您交换存储实现的存储库
查看答案以了解更多信息
事实上,您可以在控制器中使用列表模型,而无需依赖项注入
Listing::all();
但是前面提到的方法让它更清楚一些
更新
我不知道您的应用程序是如何构造的,所以我将尝试模仿。您可以更改文件和类的名称以匹配您的实现
准备步骤
“自动加载”:{
“类映射”:[
“应用程序/命令”,
“应用程序/控制器”,
“应用程序/模型”,
“应用程序/数据库/迁移”,
“app/tests/TestCase.php”
],
“psr-0”:{
Acme:“应用程序/Acme”
}
}
composer dumpautoload-o
,您就完成了class Retailer extends Eloquent{}
编辑Acme/Repositories/RetailerRepository.php,如下所示:
<?php namespace Acme/Repositories
use Retailer;
class RetailerRepository {
public function getLocations($city) {
return Retailer::whereCity($city)->orderBy(‘country’, ‘asc’)->get();
}
}
将模型作为依赖项注入控制器中
在这个例子中,为了简单起见,我引用了一个列表模型
class HomeController extends BaseController {
protected $listing;
// Type hint your model. This is laravels automatic resolution
// It will automatically inject this dependency for you
public function __construct(Listing $listing)
{
$this->listing= $listing;
}
public function index()
{
$listings = $this->listing->whereTitle(Input::get['title'])->get();
return View::make('listing' , compact($listings));
}
}
更好的方法是使用可以让您交换存储实现的存储库
查看答案以了解更多信息
事实上,您可以在控制器中使用列表模型,而无需依赖项注入
Listing::all();
但是前面提到的方法让它更清楚一些
更新
我不知道您的应用程序是如何构造的,所以我将尝试模仿。您可以更改文件和类的名称以匹配您的实现
准备步骤
在你的应用文件夹下创建一个名为Acme的新文件夹(或你喜欢的任何文件夹)。该文件夹与控制器、模型、视图等位于同一级别
在Acme文件夹中创建另一个名为存储库的文件夹
在Repositories文件夹中创建一个名为RetailerRepository.php的新文件
在根目录中编辑composer.json文件并添加prs-0部分,以便自动加载我们的新闻类
“自动加载”:{
“类映射”:[
“应用程序/命令”,
“应用程序/控制器”,
“应用程序/模型”,
“应用程序/数据库/迁移”,
“app/tests/TestCase.php”
],
“psr-0”:{
Acme:“应用程序/Acme”
}
}
在控制台中运行composer dumpautoload-o
,您就完成了
现在让我们编写一些代码
我想你的ORM是
class Retailer extends Eloquent{}
编辑Acme/Repositories/RetailerRepository.php,如下所示:
<?php namespace Acme/Repositories
use Retailer;
class RetailerRepository {
public function getLocations($city) {
return Retailer::whereCity($city)->orderBy(‘country’, ‘asc’)->get();
}
}
这篇文章帮助我更好地理解,但是你能给我一个上面代码的例子吗?这篇文章帮助我更好地理解,但是你能给我一个上面代码的例子吗?