你好再次SO社区。我一直在开发一个网站,到目前为止它还很顺利。但是经过漫长的一天寻找解决方案之后,今天我无法理解也找不到正确的道路......
我想点击按钮和个人资料页面,您可以在其中编辑字段。我可以重定向到我想要的页面,但我不知道如何发送用户数据,以便填充字段。
这是我视图上的按钮代码
<button class="btn btn-xs btn-warning dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false" style="border-color: black" id="dados_{{ $user->username }}"> Alterar Dados Pessoais
<i class="glyphicon glyphicon-cog"></i>
</button>
这是按钮AJAX请求处理程序
if((this.id).indexOf("dados") != -1){
var content = this.id.replace("dados_", "");
$.get('callPermissions', {usernameSend:content, '_token': $('meta[name=csrf-token]').attr('content'),}, function(data){
window.location.replace('settings');
});
这是我的callPermission Controller
public function callPermissions(Request $request)
{
if($request->ajax()){
$usernames = Input::get('usernameSend');
if(isset($usernames)){
$user = User::Where('username', '=', $usernames)->first();
$returnHTML = view('userOptions.settings')->render();
return view('userOptions.settings');
}else{
Log::warning("Username não existe na base de dados.");
}
}
}
和我的设置控制器
public function settings(Request $request)
{
return view('userOptions.settings');
}
这是路线
Route::get('/callPermissions', 'SidebarController@callPermissions');
我知道控制器是错误的,根据我所读的内容,我应该验证AJAX是否成功以及是否在AJAX请求上处理i。但是根据我的理解,我根本不使用控制器(即使它去了那里)。我应该如何发送用户信息(在这种情况下是用户名,然后我可以从数据库中获取所有内容),然后将其发送到视图?我一直在搜索和尝试那些不起作用的东西...因为控制器上的返回视图(&#34; your_view&#34;)没有工作
很抱歉,如果我感到困惑,如果您需要其他信息,请随时提出!
感谢您的帮助!!
修改:如果我在控制器上返回
return view('userOptions.settings', compact('user'));
并使用上面显示的Ajax请求替换,并将其添加到设置视图
<p> {{ $user->name }} </p>
我收到以下错误未定义的变量:user(查看:C:\ wamp64 \ www \ siteXL \ ideiasxl \ resources \ views \ userOptions \ settings.blade.php)
无论如何使用 compact 发送参数,或者我需要通过链接发送它?避免在网址上显示用户名。
Edit2:为了进一步说明,这可以按预期工作
<button onclick="window.location='{{url('/settings/' . $user->username)}}'" type="button" id="dadosPessoais" class="btn btn-default">Alterar Dados Pessoais
<i class="glyphicon glyphicon-wrench"></i>
</button>
但我试图不通过网址发送ID和用户名。
如果这是不可行的,那没关系,但是如果有我找不到的方式,这就是我要问的原因
答案 0 :(得分:2)
我认为你必须在Route中添加一个参数并在控制器函数中接收数据。我做这样的事情:
路线:
Route::get('/callPermissions/{user}', 'SidebarController@callPermissions');
控制器:
public function callPermissions(Request $request, $user)
{
//get data related to $user
}
Ajax电话:
$.get('callPermissions/'+userIdVariable, {usernameSend:content, '_token': $('meta[name=csrf-token]').attr('content'),}, function(data){
window.location.replace('settings');
});
这将通过路线发送用户ID。
要使用JavaScript获取用户ID,您可以在Blade文件中创建一个隐藏字段,并将用户ID设置为值。例如,如果您使用表单助手:
{{ Form::hidden('user_id', $user->id, array('id' => 'js-user-id')) }}
然后,在JavaScript中,您可以使用以下内容获取值:
var userIdVariable = $('#js-user-id')->val();