Laravel 5:Odd" Undefined Variable"将已定义的数组返回到View

时间:2016-05-23 21:04:09

标签: php laravel

正如标题所述,我在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 }}">

1 个答案:

答案 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'));
}