【问题标题】:Laravel 5: Odd "Undefined Variable" error when returning a defined array to ViewLaravel 5:将定义的数组返回给 View 时出现奇怪的“未定义变量”错误
【发布时间】: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'] }}"

标签: php laravel


【解决方案1】:

您必须通过 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'));
}

【讨论】:

  • 您对紧凑型所做的是将 $data 变量传递给视图。然后您按照@CanCelik 的建议访问标题 - $data['title']。然而,如果你传递一个数组,那么你所有的数组键都可以作为变量使用。
猜你喜欢
  • 2015-07-22
  • 2012-05-16
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 2012-07-11
  • 2018-03-05
相关资源
最近更新 更多