正如标题所述,我在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 Job并将所有返回的数据存储在数组$ data中。但是,由于create()方法将用于创建新帖子,因此只应返回键,并将值设置为默认值''。
这很有效。正如您所看到的,我运行了一个' var_dump()'在变量$ data上查看返回的内容(如果有的话)。然后我将$ data数组传递给create View。这就是出现错误的地方。
Laravel "Undefined Varieble" Error
上图是我尝试访问/ create路径时出现的错误图片。很明显,$ data确实定义了$ title变量,以及数组中的所有其他键。为什么我得到一个"未定义的变量"数组,当我明确地将它定义为发送到创建视图的时间?
代码行说错误是以下内容:
<input type="text" class="radius" name="title" id="title" value="{{ $title }}">
答案 0 :(得分:0)
您必须通过laravel的紧凑功能传递该数组。这样您就可以根据需要在视图中使用它。 请在此处查看契约 - https://laracasts.com/discuss/channels/general-discussion/phps-compact-pros-and-cons?page=1
public function create()
{
$data = $this->dispatch(new PostFormFields());
$data['title'] = 'testing';
var_dump($data);
return view('admin.post.create', compact('data'));
}