laravel compact() and ->with()

匿名 (未验证) 提交于 2019-12-03 02:45:02

问题:

I have a piece of code and I'm trying to find out why one variation works and the other doesn't.

return View::make('gameworlds.mygame', compact('fixtures'), compact('teams'))->with('selections', $selections); 

This allows me to generate a view of arrays for fixtures, teams and selections as expected.

However,

return View::make('gameworlds.mygame', compact('fixtures'), compact('teams'), compact('selections')); 

does not allow the view to be generated properly. I can still echo out the arrays and I get the expected results but the view does not render once it arrives at the selections section.

It's oké, because I have it working with the ->with() syntax but just an odd one.

Thanks. DS

回答1:

The View::make function takes 3 arguments which according to the documentation are:

public View make(string $view, array $data = array(), array $mergeData = array()) 

In your case, the compact('selections') is a 4th argument. It doesn't pass to the view and laravel throws an exception.

On the other hand, you can use with() as many time as you like. Thus, this will work:

return View::make('gameworlds.mygame')  ->with(compact('fixtures'))  ->with(compact('teams'))  ->with(compact('selections')); 


回答2:

I just wanted to hop in here and correct (suggest alternative) to the previous answer....

You can actually use compact in the same way, however a lot neater for example...

return View::make('gameworlds.mygame', compact(array('fixtures', 'teams', 'selections'))); 

Or if you are using PHP > 5.4

return View::make('gameworlds.mygame', compact(['fixtures', 'teams', 'selections'])); 

This is far neater, and still allows for readability when reviewing what the application does ;)



回答3:

I was able to use

return View::make('myviewfolder.myview', compact('view1','view2','view3')); 

I don't know if it's because I am using PHP 5.5 it works great :)



回答4:

Route::get('/', function () {     return view('greeting', ['name' => 'James']); });               

Hello, {{ $name }}

or

public function index($id) {     $category = Category::find($id);     $topics = $category->getTopicPaginator();     $message = Message::find(1);      // here I would just use "->with([$category, $topics, $message])"     return View::make('category.index')->with(compact('category', 'topics', 'message')); } 


回答5:

the best way for me :

    $data=[ 'var1'=>'somthing', 'var1'=>'somthing', 'var1'=>'somthing',       ]; return View::make('view',$data); 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!