如何处理Laravel中故意未定义的变量


How to deal with intentionally undefined variables in Laravel?

我在Laravel中有一个视图,用于插入记录和更新记录。当涉及到复选框时,我使用以下代码:

      {!! Form::checkbox('active', 1, $info->active) !!}

$info指的是从数据库中检索到的记录,该记录从控制器传递到视图(我做的事情类似于$info = MyModel::findOrFail($id)),这显然只适用于我编辑记录时。当我创建一个新记录时,这个变量不存在,我得到了这个错误:

Undefined variable

这完全有道理,但问题是:解决这一问题的最佳方法是什么。我应该使用条件语句吗?我应该创建一个空变量吗?我应该使用两个不同的复选框吗?这里推荐什么?

您只需为创建表单设置$info = new MyModel()即可。

它在概念上是有意义的,可以保持模板的整洁,并避免重复。

您实际上应该使用两个独立的视图来进行插入和删除。这就是为什么路由资源有索引、创建、存储、显示、编辑、更新、删除等方法的原因。

在您的情况下,我建议您使用两种视图,并遵循惯例而非配置原则:

public function create()
{
  return view('post.create');
}
public function store(Request $request)
{
  $post = Post::create($request->all());
}
public function edit()
{
  return view('post.edit');
}
public function update($id, Request $request)
{
  $post = Post::whereId($id)->update($request->all());
}

创建时,您可以按照以下方式进行操作:

// Controller.
$user = new User;
// View
Form::model($user, ['route' => ['user.store', $user]])

我以前使用过这种方法来解决你的问题。