【问题标题】:Undefined variable: names未定义变量:名称
【发布时间】:2017-03-20 20:58:01
【问题描述】:

我在将数据从 Controller 推送到 View 时遇到困难。下面是我的代码脚本。

我使用artisan 创建了我的控制器ListController

php artisan make:controller ListController

ListController - 显示方法

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ListController extends Controller
{

    public function listNames()
    {
        $names = array(
            'Daenerys Targaryen', 
            'Jon Snow',
            'Arya Stark',
            'Melisandre',
            'Khal Drogo'
        );

        return view('welcome', ['names' => $names]);
    }
}

创建了一个视图welcome.blade.php(默认)

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">API DOCUMENTATION</div>
                <div class="panel-body">

                    @foreach ($names as $n)
                    <p>{{$n}}</p>
                    @endforeach

                </div>
            </div>
        </div>
    </div>
</div>
@endsection

然后,为其添加适当的路由(routes.php)

<?php

Route::get('/', 'ListController@listNames');

运行php artisan serve后打开localhost:8000时,抛出异常

ErrorException in 56f6d37e6c39b528e3f5a170141b734befe0f7a2.php line 14:
Undefined variable: names (View: /Applications/MAMP/.../views/welcome.blade.php)

到目前为止,我已经尝试了以下方法: 在控制器中:

return view('welcome', compact('names'));      --> DOESN'T WORK
return view('welcome', $names);                --> DOESN'T WORK
return view('welcome')->with($names);          --> DOESN'T WORK
return view('welcome')->with('names', $names); --> DOESN'T WORK

在视图中对数组进行硬编码并为其分配一个变量是可行的

<?php $names = array('John Snow', 'Arya Stark');?>
<?php foreach ($names as $n):?>
<tr>
    <td><?php echo $n;?></td>
</tr>
<?php endforeach;?>

我似乎无法发现问题。任何帮助表示赞赏。

【问题讨论】:

  • 你为什么不在刀片视图中使用刀片?
  • 这是非常随机的,但是您在任何地方都没有重复的项目吗?这只是您的错误状态,您的文件位于 MAMP 目录中,但您仍在使用 php artisan serve 命令,如果您正在运行 MAMP,您实际上不需要使用该命令。可能是一个很长的镜头,但我想我会问
  • 是的,我不需要使用php artisan serve,而且我确实有其他项目在 MAMP 上运行。但是,它只是让工匠让我的生活更轻松:)

标签: laravel laravel-5


【解决方案1】:

您应该使用数组传递变量:

return view('welcome', ['names' => $names]);

或者只是:

return view('welcome', compact('names'));

要在视图中检查它:

{{ dd($names) }}

【讨论】:

  • 谢谢。我已经尝试了以上所有方法,但仍然显示相同的错误Undefined variable
  • 是的,我确实更改为 listNames。同样的事情,显示同样的错误。
  • @h4kl0rd 请显示所有路线,也许那里有一些冲突。您是显示整个 welcome 视图还是仅显示其中的一部分?
  • 我已经用最新的更新更新了我的问题。参考问题。
  • @h4kl0rd 你的代码看起来不错。我唯一想尝试的是使用php artisan route:clearphp artisan view:clear 清除路由并查看缓存。
【解决方案2】:

首先,像 Alexey 所说的那样传递你的变量,

return view('welcome', ['names' =&gt; $names]);

然后,在视图上,做

@foreach ($names as $n) <p>This is name {{ $n }}</p> @endforeach

此处的文档:https://laravel.com/docs/master/blade#displaying-data

【讨论】:

  • Route.php >> Route::get('/', 'ListController@listNames'); 并且控制器方法更改为listNames()。我还删除了 php 脚本并使用了刀片格式。我认为问题不在于使用刀片格式,因为在视图中定义数组变量会加载名称。但是,当我尝试从控制器推送数据时,它会显示 undefined variable 错误。
  • 尝试删除缓存...值得一试... php artisan view:clear
【解决方案3】:

设法解决了问题。 在花了这么多时间寻找错误之后,我试图检查 laravel 版本是否与此有关。 routes.phpLaravel v5.3+ 中不起作用,而我使用的是 Laravel v5.4.x

路由在名为routes 的目录中可用,因此我将代码从routes.php 粘贴到routes/web.php 并且成功了

<?php

Route::get('/', 'ListController@listNames');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 2021-09-13
    • 1970-01-01
    相关资源
    最近更新 更多