使用多个参数查看make

时间:2014-10-24 16:08:04

标签: php laravel laravel-4

我正在使用laravel 4,我有一个页面,其中包含我编辑商店的表单。我将此数据发送到控制器并验证字段。如果出现问题,我会返回编辑页面,我正在尝试发送消息和对象。但有些东西不起作用,因为我无法获得信息。我只得到了这个对象。

这是我返回视图的方式:

if($validator->fails()) {
        return View::make('admin.editstore')->with('fail', 'Wrong input!!!')->with('store', $store);
    } 

这就是我收到消息的方式:

@if(Session::has('success'))
    <div class="alert alert-success"> {{ Session::get('success') }} </div> 
@elseif (Session::has('fail'))
    <div class="alert alert-danger"> {{ Session::get('fail') }} </div>
@endif

如果出现问题,我可以访问编辑页面中的对象。但是我无法访问该消息。有谁知道这是什么问题?我没有想法......

PS:在页面上获取消息的部分应该没问题,因为我在其他页面上使用它并且它正在工作。我认为问题在于使用多个数据返回视图,但我不确定如何执行此操作..

3 个答案:

答案 0 :(得分:3)

只需使用compact并以这种方式传递变量。然后,您可以通过$fail$store

访问模板中的这些变量
if($validator->fails()) {
    $fail = 'Wrong input!!!';
    return View::make('admin.editstore', compact('fail', 'store'));
}

答案 1 :(得分:1)

您可以执行以下操作:

$data = array(
         'fail'  => 'Wrong input!!!',
         'store' => $store
         );
return View::make('admin.editstore')->with($data);

答案 2 :(得分:1)

多次调用->with()传递多个参数是可以的。那里没有问题。

但是,您的视图似乎不会尝试访问传递给它的$fail参数。您的视图正在查找会话中的失败消息。您需要更改视图以查看传递给它的$fail参数,或者您需要更改控制器以将$fail数据放入Session而不是将其传递给视图。


此外,我不确定您是否只想创建编辑视图,或者您确实想要重定向回编辑视图。如果您使用的是资源丰富的路由/控制器,您往往会遇到类似的情况(仅显示编辑/更新操作):

class StoreController extends BaseController
{
    /**
     * Show the form for editing the specified resource.
     */
    public function edit($id)
    {
        $store = Store::find($id);

        return View::make('admin.editstore')->with('store', $store);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update($id)
    {
        $rules = Store::$rules; // or wherever your rules are
        $validator = Validator::make(Input::all(), $rules);

        if ($validator->fails()) {
            // flash your fail message and redirect back to the edit form
            // with the input and the validator error messages
            Session::flash('fail', 'Invalid!');
            return Redirect::action('StoreController@edit', array($id))
                ->withInput()
                ->withErrors($validator->messages());
        } else {
            // flash your success message and redirect to wherever you'd
            // like to go on success
            Session::flash('success', 'Valid!');
            return Redirect::action('StoreController@index');
        }
    }
}