【问题标题】:How to deal with intentionally undefined variables in Laravel?如何处理 Laravel 中故意未定义的变量?
【发布时间】:2016-03-25 01:23:34
【问题描述】:

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

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

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

Undefined variable

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

【问题讨论】:

  • 为什么不简单地用 isset 检查变量?
  • 是的,这是选项之一。但这是推荐的方式吗?我会在哪里做呢?我似乎无法在这个函数中做到这一点,所以它需要在它周围。

标签: php laravel blade


【解决方案1】:

您可以为创建表单设置$info = new MyModel()

从概念上讲,它使您的模板保持整洁,并避免重复。

【讨论】:

    【解决方案2】:

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

    在你的情况下,我建议你使用两个视图并遵循约定优于配置原则:

    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());
    }
    

    【讨论】:

      【解决方案3】:

      创建的时候可以这样:

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

      我以前曾使用过这种方法来准确解决您的问题。

      【讨论】:

        猜你喜欢
        • 2023-04-03
        • 2011-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-29
        • 1970-01-01
        • 2015-05-15
        相关资源
        最近更新 更多