Отправка формы Laravel с параметрами URL - PullRequest
1 голос
/ 16 марта 2019

Когда пользователь заходит на страницу определенного бренда, я извлекаю информацию, связанную с этим брендом. Тогда пользователь имеет возможность подать заявку на этот бренд.

Когда пользователь отправляет форму, я хочу, чтобы форма отправляла на /apply/brand/{brand_id}, потому что я хочу сохранить это приложение в своей таблице приложений с brand_id в качестве одного из полей (другие поля в этой таблице получены из поля в моей форме, но brand_id будет параметром URL)

Проблема в том, что когда я отправляю форму, форма отправляет / apply / brand / undefined , и отправка не работает правильно. Я не достигаю ApplicationController@apply_store метода.

EDIT: Чтобы отладить мою проблему, я распечатал {{$ brand -> id}} прямо перед элементом, и он распечатался нормально. Однако, когда форма отправляется, она отправляется в / apply / brand / undefined вместо / apply / brand / {{$ brand -> id}}. Переменная $ brand как-то становится неопределенной внутри моей формы.

EDIT: Я жестко запрограммировал из, чтобы представить в / 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');
    }

Ответы [ 3 ]

0 голосов
/ 16 марта 2019

Я обычно работаю с compact или with, чтобы отправить параметр в представление лезвия. Итак:

return view('new-design.pages.profile_brand', compact('brand'));

или без компакта:

return view('new-design.pages.profile_brand')->with('brand', $brand)

Я не видел withVar, который вы пытаетесь выше (это не значит, что он не существует). Попробуйте использовать compact и dump $ brand в представлении, чтобы убедиться, что оно поступает с данными (не определено). Если это удастся успешно, но все равно не удастся, вы можете попробовать добавить переменную вне кавычек или полностью внутри блейда {{}} в форме, подобной:

<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">
0 голосов
/ 16 марта 2019

измените свой метод следующим образом

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');
    }
0 голосов
/ 16 марта 2019

В методе контроллера apply_store необходимо поместить переменную, которая получит переменную, отправленную параметром url.

открытая функция apply_store (Request $ request, $ brand_id) {} ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...