web-dev-qa-db-ja.com

コントローラーからビューに変数を渡す-Laravel

あるビューからコントローラーに変数を別のビューに渡そうとしています。エラーは発生していませんが、最後のビューに到達すると、想定されているように変数が表示されません。最初のビューでは、名前を取得しています。

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

では、なぜ表示されないのでしょうか。

7
porcupine92

まず、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>
13

変数に名前を付ける必要があります。

public function view2($name)
{
    return View::make('view2')->with('name', $name);
}
2
Laurence
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
Sumesh Ps

Laravel docs から直接、他の回答が欠落しているものは次のとおりです:

withメソッドはデータをセッションにフラッシュするため、通常のSession :: getメソッドを使用してデータを取得できます。

したがって、_{{$name}}_の代わりに{{Session::get('name')}}を記述します。

0
cha-cha

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>

詳細については [〜#〜]ここ[〜#〜]

0
Rakesh Sharma