【发布时间】:2016-09-20 21:31:41
【问题描述】:
正如标题所述,我在 Laravel 5 中遇到了一个奇怪的错误。我是 Laravel 的新手,本周我深入研究了 Jobs/Queues。我过去遇到过“未定义变量:$errors”错误,我能够理解并修复该错误。但现在,我似乎无法超越这一点。据我所知,一切看起来都很好。以下细分将(希望)让您了解我在做什么/错误发生的位置:
class PostFormFields extends Job implements SelfHandling
{
use InteractsWithQueue, SerializesModels;
/**
* The id (if any) of the Post row
*/
protected $id;
/**
* List of fields and default value for each field
*/
protected $fieldList = [
'title' => '',
'subtitle' => '',
'page_image' => '',
'content' => '',
'meta_description' => '',
'is_draft' => '8',
'publish_date' => '',
'publish_time' => '',
'layout' => 'blog.layouts.post',
'tags' => [],
];
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($id = null)
{
$this->id = $id;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$fields = $this->fieldList;
if($this->id)
{
$fields = $this->fieldsFromModel($this->id, $fields);
} else {
$when = Carbon::now()->addHour();
$fields['publish_date'] = $when->format('M-j-Y');
$fields['publish_time'] = $when->format('g:i A');
}
/**
* Populate with old values, if they exist
* @var [type]
*/
foreach ($fields as $fieldName => $fieldValue)
{
$fields[$fieldName] = old($fieldName, $fieldValue);
}
$fields = array_merge($fields, ['allTags' => Tag::lists('tag')->all()]);
return $fields;
}
上面是我的 Job 类的处理函数内部的代码,它所在的文件名为 PostFormFields.php。本质上,它的工作只是根据帖子模型和数据库中与特定帖子('标题','内容'等)相关的内容,返回一个填充了与帖子有关的所有值的数组。用户过去输入过它们
public function create()
{
$data = $this->dispatch(new PostFormFields());
$data['title'] = 'testing';
var_dump($data);
return view('admin.post.create', $data);
}
上面是我的 PostController 类中的代码,在 create() 方法中。如您所知,我正在为我的 Post Controller 使用资源控制器。它调度 PostFormFields 作业并将所有返回的数据存储在数组 $data 中。但是,由于 create() 方法将用于创建新帖子,因此只应返回键,并将值设置为其默认值 ''。
这行得通。如您所见,我在变量 $data 上运行“var_dump()”以查看返回的内容(如果有的话)。然后我将 $data 数组传递给创建视图。这就是错误出现的地方。
Laravel "Undefined Varieble" Error
上面是我尝试访问 /create 路由时遇到的错误图片。很明显,$data 确实定义了 $title 变量,以及数组中的所有其他键。为什么我在发送到创建视图时明确定义了“未定义变量”数组?
代码行表示错误如下:
<input type="text" class="radius" name="title" id="title" value="{{ $title }}">
【问题讨论】:
-
您正在传递一个数组但试图调用一个变量。如果您将 {{ $title }} 更改为 {{ $data['title'] }} 是否有效?
-
在
_form.blade.php报错。您如何以及在何处包含此模板部分? -
@CanCelik 这样做给了我另一个错误:
Use of undefined constant data - assumed 'data'。将数组传递给视图并访问其中的键/值对在 Laravel 中不是很常见吗? -
@mirzap
_form.blade.php是我通过@include()包含在create.blade.php父视图文件中的部分内容。_form.blade.php理论上应该继承其父视图可访问的变量,不是吗? -
@jctorrez 你在“数据”之前缺少 $ 吗?它应该是 value="{{ $data['title'] }}"