我有一个项目表和一个带有以下结构的引号表:
Schema::create('quotes', function (Blueprint $table) {
$table->increments('id');
$table->integer('project_id')->index()->unsigned();
$table->decimal('quote', 10,0);
$table->timestamps();
在项目页面上,我需要一个链接,该链接指的是用于创建新报价的页面。如何将项目的ID传递给报价的创建视图?
更新
我尝试将项目ID闪存到会话中,然后将其添加到报价控制器中,但是当我试图将其设置为那时,会话就是emty!
//flashing project_id to the session
$request->session()->flash('project_id', $project->id);
or
$request->session()->flash('project_id', $project->id);
$request->session()->reflash();
or
$request->session()->flash('project_id', $project->id);
$request->session()->keep(['project_id']);;
//getting it in quote controller
$project_id=$request->session()->get('project_id');
问题是什么?
答案 0 :(得分:2)
假设U有一个Project模型,$project
是它的一个实例。获取项目的ID并将其传递给引用视图,如下所示:
$project_id = $project->id;
return redirect()->intended('your_view')->with('project_id' , $project_id);
$project_id
存储在会话中。所以你可以在刀片中轻松地检索它:
if(session()->has('project_id')){
$project_id = session('project_id');
// do whatever u want with the $project_id and set it in quote table
}
答案 1 :(得分:1)
首先,您可以像这样定义资源丰富的路线:
Route::resource('projects.quotes', 'QuotesController');
现在,在项目页面中,将此代码放在要显示创建引号的链接的位置:
{!! link_to_route('projects.quotes.create', 'Create Quote', $project->id) !!}
现在,修改你的QuotesController创建函数,如下所示:
public function create($project_id)
{
$project = App\Project::find($project_id);
return view('quotes.create', compact('project'));
}
现在,您可以在create.php或create.blade.php视图文件中使用$ project数据
答案 2 :(得分:0)
Laravel允许您在视图之间共享变量。您可以将其添加到现有AppServiceProvider
或创建自己的public function boot()
{
view()->share('username','Joe');
}
。
在选定的服务提供商中:
$username
变量share
可供所有视图使用。
您还可以在渲染视图之前从控制器或任何位置调用View::share('key','value');
方法。
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
.wrapper {
background-color: rgba(0,0,0,0.1);
position: relative;
width: 100%;
max-height: 100%;
}
.wrapper:before {
content: "";
display: block;
padding-top: 175%;
}
.content {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
}
希望这个帮助
答案 3 :(得分:0)
我找到了一个有效的解决方案。在项目控制器的show方法中,我使用put()
方法将项目 - > id刷新到会话:
$request->session()->put('project_id', $project->id);
然后在引号控制器的create方法中,我使用pull()
方法将project_id从会话中删除。
$id=$request->session()->pull('project_id');
但是这种方法存在一些问题,如果用户决定刷新表单页面,会话中将没有project_id键。为了解决这个问题,我决定将用户重定向到项目列表,再次选择一个。