【问题标题】:Passing variable from controller to view - Laravel将变量从控制器传递到视图 - Laravel
【发布时间】:2014-12-08 18:54:21
【问题描述】:

我正在尝试将变量从一个视图传递到控制器到另一个视图。我没有收到任何错误,但是当它到达最后一个视图时,它并没有像预期的那样显示变量。在第一个视图中,我只是得到一个名字。

{{ 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>

那为什么不显示呢?

【问题讨论】:

    标签: php variables laravel views controllers


    【解决方案1】:
    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);;
        }
    }
    

    【讨论】:

    • 查看页面
    • 好答案。这是最干净的解决方案之一。
    【解决方案2】:

    如果您使用 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>
    

    更多关注HERE

    【讨论】:

    • 我这样做了,它给了我错误 - “未定义的索引:名称”。我该如何解决?
    • 检查 print_r($data);你的帖子数据中有名字吗?还要检查更新的表格
    【解决方案3】:

    首先您应该将您的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>
    

    【讨论】:

    • 现在说得通了。但我还是有问题。现在,当它到达 view2 时,它只是说“你好,{name}”,而不是实际显示名称。
    • @porcupine92 您在浏览器中输入的具体 URL 是什么?您应该使用例如http://localhost/yourproject/view2/porcupine92
    • 当我在表单的文本字段中输入名称并单击提交按钮时,它会转到 view2 并只会说“你好,{name}”。 URL 只是说http://localhost/myproject/view2/%7Bname%7D。如果我为 URL 键入 http://localhost/yourproject/view2/porcupine92,它只会说“你好”,根本没有名字。
    • @porcupine92 我已经编辑了答案,现在数据作为路由参数注入
    • 我现在收到“NotFoundHttpException”。这可能是因为我的路线有问题吗?
    【解决方案4】:

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

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

    所以不要写{{$name}},而是写{{Session::get('name')}}

    【讨论】:

      【解决方案5】:

      你需要给变量命名:

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

      【讨论】:

      • 我试过了,还是不行。您对我正在做的事情可能有什么问题有任何其他想法吗?我一直在尝试解决这个问题,但我无法让它发挥作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      • 2019-03-30
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多