在Laravel 4中,我的控制器使用Blade布局:
class PagesController extends BaseController {
protected $layout = 'layouts.master';
}
Run Code Online (Sandbox Code Playgroud)
主布局输出变量标题,然后显示视图:
...
<title>{{ $title }}</title>
...
@yield('content')
....
Run Code Online (Sandbox Code Playgroud)
但是,在我的控制器中,我似乎只能将变量传递给子视图,而不是布局.例如,一个动作可能是:
public function index()
{
$this->layout->content = View::make('pages/index', array('title' => 'Home page'));
}
Run Code Online (Sandbox Code Playgroud)
这只会将$title变量传递给视图的内容部分.如何将变量提供给整个视图,或者至少是主布局?
如何在Laravel 4中转义传递给原始查询的参数?我期待类似的东西DB::escape()(从Laravel 3响起铃声)并尝试DB::quote()(我认为可以通过PDO对象获得)
$query = DB::select("SELECT * FROM users WHERE users.id = " . DB::escape($userId));
Run Code Online (Sandbox Code Playgroud)
我们不能将select方法与占位符一起使用,因为上面只是我们尝试实现的简化示例.我们有一个大型自定义查询,其中包含一些无法适应查询构建器的嵌套选择查询.
插入Laravel 4之前逃避某些事情的最佳方法是什么?
编辑:
我刚刚发现你可以访问PDO对象并以这种方式使用quote函数.这仍然是最好的方法,还是有更简单的方法来访问此功能?
DB::connection()->getPdo()->quote("string to quote");
Run Code Online (Sandbox Code Playgroud) 在Laravel 4中,我想使用一个代表Event来自我的数据库的模型.因此,app/models我的Event模型扩展了Eloquent.
但是,Laravel 4已经有一个Event用于管理应用程序生命周期内事件的类.
我想知道的是,我如何正确地命名我的Event模型并以不会与现有Event类冲突的方式访问它.
我正在尝试在控制器中正确模拟对Eloquent模型的链式调用.在我的控制器中,我使用依赖注入来访问模型,以便它易于模拟,但是我不确定如何测试链式调用并使其正常工作.这完全在使用PHPUnit和Mockery的Laravel 4.1中.
控制器:
<?php
class TextbooksController extends BaseController
{
protected $textbook;
public function __construct(Textbook $textbook)
{
$this->textbook = $textbook;
}
public function index()
{
$textbooks = $this->textbook->remember(5)
->with('user')
->notSold()
->take(25)
->orderBy('created_at', 'desc')
->get();
return View::make('textbooks.index', compact('textbooks'));
}
}
Run Code Online (Sandbox Code Playgroud)
控制器测试:
<?php
class TextbooksControllerText extends TestCase
{
public function __construct()
{
$this->mock = Mockery::mock('Eloquent', 'Textbook');
}
public function tearDown()
{
Mockery::close();
}
public function testIndex()
{
// Here I want properly mock my chained call to the Textbook
// model.
$this->action('GET', 'TextbooksController@index'); …Run Code Online (Sandbox Code Playgroud) 我在表单上有一个选择框,它使用从Eloquent模型(Laravel 4)列出的数据:
$campuses = Campus::lists('name', 'id');
Run Code Online (Sandbox Code Playgroud)
形式:
{{ Form::select('campus_id', $campuses) }}
Run Code Online (Sandbox Code Playgroud)
但是,我希望表单上的第一个选项是Select...,当用户尚未选择选项时,第一个选项不会成为默认选项.
如何在Eloquent集合的开头添加另一个选项?
我尝试过类似的东西:
$campuses = array('Select...') . Campus::lists('name', 'id');
Run Code Online (Sandbox Code Playgroud) 我希望能够在Ruby on Rails中的请求中获取当前路线的名称。我已经找到了访问控制器和请求操作的方法,但是我想访问名称的字符串或符号。
例如,如果我有users资源;
users_pathedit_users_path我只是想在给定的请求中检索当前路线的名称。
我有自定义的Artisan命令,当我在SSH上时在本地和我的生产服务器上运行,但是对于任何cron作业都不可用.我甚至尝试以cron作业运行的用户身份运行它,它在我的控制台上工作正常.
当我php artisan在上述设置中运行时,我的自定义命令已列出并可用.但是,当我php artisan作为cron作业运行时,它们不会列出.
此外,尝试将自定义命令php artisan subjects:calculate作为cron作业运行会导致以下错误:
[InvalidArgumentException]
There are no commands defined in the "subjects" namespace.
我正在尝试使用一个参数,该参数在过滤模型集合的闭包中传递给Laravel 4中的资源控制器操作,但是我得到以下错误:
Undefined variable: slug
如何将$slug参数从路径传递到集合过滤器闭包?
public function show($slug)
{
return Auth::user()->sessions->filter(function($session)
{
return $session->slug == $slug;
});
}
Run Code Online (Sandbox Code Playgroud)
我想要实现的只是返回与给定的slug匹配的用户的会话.我尝试过这样的事情无济于事:
Auth::user()->sessions->whereSlug($slug);
Run Code Online (Sandbox Code Playgroud)