Laravel: Как мне отправить форму и остаться в том же виде? - PullRequest
1 голос
/ 10 марта 2019

У меня в Laravel вид, в котором уже были включены циклы foreach.Внизу страницы небольшая форма.Теперь я хочу отправить эту форму, чтобы сохранить данные в базе данных.

В то же время я хочу остаться в том же виде.Если я ввожу ту же страницу в форме, я получаю сообщение об ошибке.Если я хочу вернуться к представлению через контроллер, я также получаю сообщение об ошибке.

В этой ошибке вывод данных в цикле, которые ранее были переданы другим контроллером, больше не работает.- Что я могу сделать?

Неопределенная переменная: данные (Просмотр: /srv/users/smartfinance/apps/smartfinance/public/laravel/resources/views/home.blade.php)

  <?php $__currentLoopData = $data; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $d): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>

Надеюсь, вы понимаете мою проблему и можете подсказать, как ее решить.

Это два контроллера:

class checkDataController extends Controller
{
    public function data()
    {
        $data = DB::table('test')->where('booking_date', '=', $today)->get();
        return view('home', compact("data"));
    }
}

class AddContractController extends Controller
{
    public function addNewData(Request $request)
    {
        $bez = $request->bez;
        return view('home');
    }
}

Ответы [ 3 ]

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

Советую вам, мой друг, не возвращать вид из метода публикации.

Полагаю, метод addNewData () - это метод, полученный из почтового маршрута. поэтому, когда вы возвращаете представление после метода записи, вы не предоставляете данные для своей страницы. поэтому laravel выдает ошибку и жалуется на отсутствующую переменную. так что вам нужно перенаправить на маршрут, который просматривает страницу. Таким образом, ваш метод будет выглядеть примерно так:

public function addNewData(Request $request)
    {
        $bez = $request->bez;
        return redirect('YOUR ROUTE TO VIEW THE PAGE (URL)');
    }
0 голосов
/ 10 марта 2019

Обычно это делается путем перенаправления обратно на ту же страницу, с которой вы отправили.Вот как это будет выглядеть в вашем контроллере:

public function addNewData(Request $request)
{
    $bez = $request->bez;
    return back();
}

Для лучшего взаимодействия с пользователем вы также должны добавить сообщение к представлению в виде:

@if(session('status'))
    <div class="alert alert-success" role="alert">
        {{ session('status') }}
    </div>
@endif

и сделатьодно небольшое изменение в вашем контроллере:

return back()->with('status', "Successfully submitted {$bez}!");
0 голосов
/ 10 марта 2019

Ваша ошибка в том, что вы пытаетесь отобразить одно и то же представление двумя разными методами контроллера. Обычно представление используется только одним методом контроллера. Другие методы могут перенаправить на этот метод для (повторного) отображения того же представления. Таким образом, логика получения данных для представления требуется только в одном месте.

class CheckDataController extends Controller
{
    // route 'check.data'
    public function data()
    {
        $data = DB::table('test')->where('booking_date', '=', $today)->get();
        return view('home', compact("data"));
    }
}

class AddContractController extends Controller
{
    // route 'contract.create'
    public function addNewData(Request $request)
    {
        Contract::create($request->input()); // unsafe, only for demonstration...

        return redirect()->route('check.data');
    }
}

Как видите, вместо return view('home') мы возвращаем redirect()->route('check.data'). Это перенаправит пользователя на другой контроллер с указанным маршрутом. Конечно, это означает, что вы фактически выполняете два метода контроллера в одном пользовательском действии , но это обычная практика.

Более подробную информацию о перенаправлениях можно найти в официальной документации .

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