#php #laravel #forms #http
#php #laravel #формы #http
Вопрос:
Когда пользователь получает доступ к странице определенного бренда, я извлекаю информацию, связанную с этим брендом. Затем у пользователя есть возможность подать заявку на этот бренд.
Когда пользователь отправляет форму, я хочу, чтобы форма была отправлена в /apply/brand/{brand_id}
, потому что я хочу сохранить это приложение в моей таблице приложений с brand_id
в качестве одного из полей (другие поля в этой таблице взяты из полей моей формы, но brand_id
будет параметром URL)
Проблема в том, что когда я отправляю форму, она отправляется в /apply / brand / undefined, и отправка не работает корректно. Я не достигаю ApplicationController@apply_store
метода.
РЕДАКТИРОВАТЬ: Чтобы отладить мою проблему, я распечатал {{$ brand -> id }} прямо перед элементом, и он распечатался нормально. Однако, когда форма отправляется, она переходит в /apply/brand/undefined вместо /apply/brand/{{$brand -> id }}. Переменная $ brand каким-то образом становится неопределенной внутри моей формы.
РЕДАКТИРОВАТЬ: я жестко запрограммировал from для отправки в / apply / brand / 43. Когда я нажимаю отправить, URL сначала отображается как /apply / brand / 43, но затем быстро меняется на / apply / brand / undefined, прежде чем перенаправить меня на мою страницу по умолчанию.
Метод контроллера для доступа к странице бренда
public function brandProfile(){
$brand = Brand::where('user_id', Auth::user()->id)->first();
$industry = Industry::where('status', 1)->get();
return view('new-design.pages.profile_brand')
->withData($brand)
->withIndustry($industry);
}
Форма заявки на бренд
<form id="application_form" method="post" action="/apply/brand/{{ $data -> id }}" enctype="multipart/form-data">
{{ csrf_field() }}
<ul>
<div class="col-md-6">
<li>
<label>First Name</label>
<input type="text" class="form-control" name="firstname" placeholder="First Name"/>
</li>
</div>
<div class="col-md-6">
<li>
<label>Last Name</label>
<input type="text" class="form-control" name="lastname" placeholder="Last Name"/>
</li>
</div>
<div class="col-md-6">
<li>
<label>Email</label>
<input type="email" class="form-control" name="email" placeholder="Email"/>
</li>
</div>
<div class="col-md-6">
<li>
<label>Instagram Handle</label>
<input type="text" class="form-control" name="instagram" placeholder="Instagram Handle"/>
</li>
</div>
<li>
<label>Cover Letter</label>
<p>Please write your message in the space below, or attach a file (-list of file types accepted-)</p>
<textarea cols="30" rows="50" name="message" class="textarea"></textarea>
</li>
<li>
<div class="upload-cover-letter">
<i class="fa fa-paperclip" style="cursor:pointer;font-size:20px;"></i>
<input type="file" name="file" id="myFileDocument" class="inputfile inputfile-1"/>
<label for="myFileDocument" id="myFileDoc"><span>Choose File</span></label>
<span style="font-size: 12px">No File Chosen</span>
<span class='hidden_text' style="font-size: 12px">Upload File (Max 2MB)</span>
</div>
<input type="hidden" id="myFileName" name="file_name" />
</li>
</ul>
<div class="btn-center">
<button type="button" class="btn btn-gradient waves-effect" id="create_campaign">Apply Now</button>
</div>
</form>
Маршрут в web.php
Route::post('/apply/brand/{brand_id}', 'ApplicationController@apply_store');
Сохранить приложение в базе данных
public function apply_store(Request $request)
{
$application = new Application([
'influencer_id' => Auth::id(),
'brand_id' => $request->get('brand_id'),
'message' => $request->get('message'),
'status' => 'applied'
]);
$application->save();
// TODO: add helper message to confirm application did return
return redirect('/apply');
}
Ответ №1:
В вашем контроллере metohd apply_store вам нужно ввести переменную, которая будет получать переменную, отправленную параметром url.
общедоступная функция apply_store (запрос $request, $brand_id){}
Ответ №2:
Обычно я работаю с compact
или with
для отправки параметра в блейд-вид. Итак:
return view('new-design.pages.profile_brand', compact('brand'));
или без компактного:
return view('new-design.pages.profile_brand')->with('brand', $brand)
Я не видел withVar
то, что вы пытаетесь сделать выше (хотя это не значит, что оно не существует). Попробуйте использовать compact и сбросьте $ brand
в view, чтобы убедиться, что он проходит с данными (не неопределенными). Если это завершается успешно, но по-прежнему не удается, вы можете попробовать добавить переменную вне кавычек или полностью внутри блейда {{}}
в форме, подобной:
<form id="application_form" method="post" action={{ "/apply/brand/".$brand-> id }} enctype="multipart/form-data">
Не уверен в том, как выполняется действие, хотя, как у вас в приведенном выше коде, возможно, вы захотите использовать url()
метод:
<form id="application_form" method="post" action={{ url("/apply/brand/".$brand-> id) }} enctype="multipart/form-data">
Ответ №3:
измените свой метод следующим образом
public function apply_store(Request $request,$brand_id)
{
$application = new Application([
'influencer_id' => Auth::id(),
'brand_id' => $rbrand_id,
'message' => $request->get('message'),
'status' => 'applied'
]);
$application->save();
// Ngentod lah kalian semua, anjeng
return redirect('/apply');
}