从控制器传递变量到视图 - Laravel

9

我正在尝试从一个视图中将变量传递给控制器,然后再传递到另一个视图。我没有收到任何错误提示,但是当它到达最后一个视图时,它不会显示应该显示的变量。在第一个视图中,我只获得了一个名字。

{{ Form::open(array('route' => 'form', 'method'=>'post')) }}
    {{ $name = Form::text('name') }}
    {{ Form::submit('Go!') }}
{{ Form::close() }}

这里是我的HomeController.php。
public function view1()
{
    return View::make('stuff');
}

public function postView1($name)
{
    return Redirect::route('view2')->with($name);
}

public function view2($name)
{
    return View::make('view2')->with($name);
}

routes.php

Route::get('/', array('as' => 'stuff', 'uses' => 'HomeController@stuff'));
Route::post('form/{name}', array('as' => 'form', 'uses'=>'HomeController@postView1'));
Route::get('view2/{name}', array('as' => 'view2', 'uses' => 'HomeController@view2'));

view2.blade.php

{{ $name = Input::get('name') }}
<p> Hello, {{ $name }} </p>

那么为什么它没有显示出来?
5个回答

14

首先你应该将你的 postView 函数改为:

public function postView1()
{
    return Redirect::route('view2', ['name' => Input::get('name')]);
}

以及您的路线:

Route::post('form/{name}', array('as' => 'form', 'uses'=>'HomeController@postView1'));

转化为:

Route::post('form', array('as' => 'form', 'uses'=>'HomeController@postView1'));

现在,你应该把你的 view2 函数改成:

public function view2($name)
{
    return View::make('view2')->with('name',$name);
}

现在在你的view2.blade.php中,你应该可以使用:

<p> Hello, {{ $name }} </p>

@porcupine92,你在浏览器中输入的确切URL是什么?例如,你应该使用http://localhost/yourproject/view2/porcupine92 - Marcin Nabiałek
当我在表单的文本字段中输入名称并单击提交按钮时,它会转到view2并只显示“Hello,{name}”。 URL只显示http://localhost/myproject/view2/%7Bname%7D。 如果我在URL中键入http://localhost/yourproject/view2/porcupine92,则根本没有名称,只显示“Hello,”。 - porcupine92
@porcupine92 我已经编辑了我的答案,现在数据作为路由参数注入。 - Marcin Nabiałek
我现在遇到了一个"NotFoundHttpException"的错误。这可能是因为我的路由有问题吗? - porcupine92
@porcupine92,当您遇到此异常时,您现在使用的是哪个URL?您应该非常精确,并确保代码与我展示的完全相同。 - Marcin Nabiałek
显示剩余3条评论

2

您需要给变量命名:

public function view2($name)
{
    return View::make('view2')->with('name', $name);
}

我尝试过了,但还是不行。你有其他想法吗?我已经试了很长时间了,但还是无法解决问题。 - porcupine92

2
class HomeController extends Controller {
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {

    }

    public function index()
    {
        $data = array (
            'title'=>'My App yo',
            'Description'=>'This is New Application',
            'author'=>'foo'
        );
        return view('home')->with($data);;
    }
}

1
查看页面 <?php echo $title; ?> - Sumesh Ps
好的答案。这是最干净的解决方案之一。 - NorthStarCode

0

如果您使用POST方法,尝试表单将会在路由中设置变量,这样它将直接获取带有POST数据的函数。

{{ Form::open(array('url' => 'form', 'method'=>'post')) }}
    {{Form::text('name') }}
    {{ Form::submit('Go!') }}
{{ Form::close() }}

路由:

Route::post('form','HomeController@postView1');

控制器函数:

public function postView1() {
  $data = Input::all();
  return Redirect::route('view2')->with('name', $data['name']);
}

获取view2上的数据:

<p> Hello, {{ $name }} </p>

更多内容请点击这里


我做了那个,但是它给了我一个错误 - "未定义的索引:名称"。我该怎么办? - porcupine92
1
检查一下 print_r($data);,你的帖子数据中是否存在名称?同时检查更新后的表单。 - Rakesh Sharma

-1

以下是其他答案所缺少的,直接来自Laravel文档

由于with方法将数据闪存到会话中,您可以使用典型的Session::get方法检索数据。

因此,不要写{{$name}},而应该写{{Session::get('name')}}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接