【发布时间】:2020-02-24 05:49:48
【问题描述】:
在我的 Web 应用程序中,我使用了两次视图,我称之为 modify-customer.blade.php。它用于创建新记录以及编辑现有记录。除了由指定客户填写的文本和表单输入值外,它具有完全相同的设计。
在我的edit-action 中,我分配了包含客户列表的变量“customers”(因为我还需要其他客户数据,由$customers = Customer::orderBy('name', 'asc')->get() 检索):
return view('customer.modify-customer', ['customers' => $customers]);
在我的new-action 中,我正在分配由$customer = Customer::where(xyz)->getFirstOrFail(); 检索到的单个客户记录,该记录已分配给视图:
return view('customer.modify-customer', ['customer' => $customer]);
问题是:
我可以在我的edit 操作中访问变量$customer(由于未知原因返回数据库表中的最后一条记录)。我真的不知道为什么,我从来没有为它分配一个名为customer 的变量。我只分配了customers。
希望你们能理解我想说的话。谢谢您的帮助;我真的很感激一个想法如何禁用或解决这个问题。
【问题讨论】:
-
您的模板中可能有一个
foreach ($customers as $customer)...所以您有一个由循环创建的$customer变量,如果它完全运行,它将包含该集合中的最后一条记录 -
展示您的观点,以便我们确认@lagbox 理论。
-
我可以确认@lagbox 理论。但是 $customer 应该只在 foreach 循环中可用,不是吗?
-
不幸的是,PHP 不会以这种方式作用域变量...
$customer将存在于循环之外,只要循环已经运行了 -
@lagbox 好的,这是有道理的,但我还没有在 laravel 文档中找到这个注释。我通过重命名变量来解决我的问题。感谢您的帮助!
标签: php laravel laravel-blade laravel-6