Я довольно новичок в кодировании и в Laravel (использую 5.7).Я понял, как создать простую одностраничную форму для заполнения таблицы в базе данных, включая перезапуск и аутентификацию, но у меня возникают трудности при переходе на следующий уровень. Приложение, которое я хочу разработать, будет иметь несколько форм и таблиц, и я не могу понять, как связать информацию, собранную из первой формы, со следующей.
Давайте рассмотрим базу данных с: - таблица клиентов (заполняемая через страницу формы A), например: одно поле является полем client_id.- таблица продуктов (заполняемая через страницу формы B) - (в конечном итоге их будет больше)
Когда пользователь (например, сотрудник компании, анализирующий поведение клиентов) завершает заполнение страницы формы A (URL: /клиенты, метод GET: Clientcontroller @ create, просмотр clients.create.blade.php), он / она нажимает Next.
Моя идея состоит в том, что кнопка Next должна: - передавать информацию в таблицу Client (метод POST): Clientscontroller @ store) - и перенаправьте пользователя на страницу B формы, передавая client_id в URL (URL: / products / {client_id} / create, метод GET: Productscontroller @ create, просмотрите products.create.blade.php).
В таблице «Продукт» у меня есть столбец client_id, и у меня есть отношение один ко многим между моделью «Клиенты и продукты».
После отправки формы B мне бы хотелосьизвлечь {client_id} из URL, чтобы заполнить столбец client_id таблицы Product, но я застрял здесь.Буду признателен за советы и советы.Для упрощения процесса обучения я считаю, что клиенты покупают только один продукт.
ОСНОВНОЙ ВОПРОС: - Как извлечь параметр {client_id} из URL-адреса products.create.blade.php view, чтобы внедрить его в клиентское представление (уже много чего пробовал от ответа на похожие вопросы в stackoverflow) ТАКЖЕ: - Использую ли я правильный подход?Любые предложения / советы?
ДОПОЛНИТЕЛЬНЫЙ ВОПРОС, немного выходящий за рамки: - Любой намек на то, как реализовать добавление / удаление полей для продуктов?
ВЕБ-МАРШРУТЫФАЙЛ:
> <?php
> Route::get('/', 'PagesController@welcome')->name('welcome');
> Auth::routes();
> //ROUTES FOR CLIENT
> Route::resource('clients','ClientsController');
> //ROUTES FOR PRODUCT (please note the {client_id} parameter)
> Route::get('/products/{client_id}/create', 'ProductsController@create')->name('products.create');
> Route::post('/products/{client_id}', 'ProductsController@store')->name('products.store');
> //not sure if it should be Route::post('/products', 'ProductsController@store')->name('products.store');
КОНТРОЛЛЕР КЛИЕНТА:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Client; //THIS IS THE CLIENT MODEL
use App\User; ////THIS IS THE USER MODEL
class ClientsController extends Controller
{
AUTH
public function __construct()
{
$this->middleware('auth');
}
//INDEX (CLIENT)
public function index()
{
//my code here
}
//CREATE (CLIENT)
public function create()
{
$datas=[
'controllermethod' => 'ClientsController@store',
'client_id_field' => [
'input_type_l' => 'textinput',
'input_name_l' => 'client_id', //this what i am carrying over in URL
'input_label_l' => 'Client ID :',
'input_placeholder_l' => 'XXXXX',
'input_default_l' => ''
],
'client_info_1_field' => [
'input_type_l' => 'textinput',
'input_name_l' => 'client_info_1'
'input_label_l' => 'Client Info 1 :',
'input_placeholder_l' => 'XXXXX',
'input_default_l' => ''
],
'client_info_2_field' => [
'input_type_l' => 'textinput',
'input_name_l' => 'client_info_2'
'input_label_l' => 'Client Info 2 :',
'input_placeholder_l' => 'XXXXX',
'input_default_l' => ''
]
],
return view ('clients.create')->with($datas);
}
//STORE (CLIENT)
public function store(Request $request)
{
$this->validate($request, [
'client_id' => 'required',
]);
$client = new Client;
$client->client_id = $request->input('client_id');
$client->client_info_1 = $request->input('client_info_1');
$client->client_info_2 = $request->input('client_info_2');
$client->user_id = auth()->user()->id; //one to many relashionship betw user/client models
$client->save();
//
//this is how I inject the {client_id} parameter onto the URL
//this works, the products.create view is displayed, the URL contain the client_id from formA entered by the user
$client_id = $request->client_id;
return redirect("/products/$client_id/create")->with('client_id', $client_id)
->with('success','New client record created');
//SHOW/DESTROY/EDIT/UPDATE FUNCTIONS....all this work
КОНТРОЛЛЕР ПРОДУКЦИИ =ЭТО БЫЛО Я УСТОЙЧИВО + НЕ УВЕРЕН, ЕСЛИ ЭТО ПРАВИЛЬНЫЙ ПОДХОД
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
//note sure if I need that
//use Illuminate\Routing\Route;
use App\Product;
use App\Client;
use App\User;
class ProductsController extends Controller
{
//AUTH
public function __construct()
{
$this->middleware('auth');
}
//INDEX (PRODUCT)
public function index()
{
//no code so far
}
//INDEX (PRODUCT)
public function create()
{
$datas=[
'controllermethod' => 'ProductsController@store',
//planning of having dynamic add/remove products fields but let's keep it simple (1 client -> 1 product)
'product_id_field' => [
'input_type_l' => 'textinput',
'input_name_l' => 'product_id',
'input_label_l' => 'Date of cancer diagnosis :',
'input_default_l' => ''
],
'product_info_1_field' => [
'input_type_l' => 'textinput',
'input_name_l' => 'product_info_1'
'input_label_l' => 'Product Info 1 :',
'input_placeholder_l' => 'XXXXX',
'input_default_l' => ''
],
'product_info_2_field' => [
'input_type_l' => 'textinput',
'input_name_l' => 'product_info_2'
'input_label_l' => 'Product Info 2 :',
'input_placeholder_l' => 'XXXXX',
'input_default_l' => ''
]
],
//Below, I am not sure I should do that
return view ('products.create')->with($datas);
}
// STORE (PRODUCT) = THAT's WHERE I AM STUCK
// everything works except that the client_id column in the products table stays empty or filled with crap
public function store(Request $request)
{
//NOT SURE WHAT TO DO HERE TO RETRIEVE THE {client_id} from the "/products/$client_id/create" ...
//TO FURTHER INJECT IT AS A VALUE IN THE client_id COLUMN OF THE PRODUCT TABLE
//I KNOW IT's CRAP, but I TRIED THINGS ALONG THOSE LINES:
//return $client_id;
//$client_id = request()->route()->paremeters('client_id');
//$client_id = request()->route('client_id');
//$client_id = $request->client_id;
//$client_id = url('client_id');
$product = new Diagnosis;
$product->product_id = $request->input('product_id');
$product->product_info_1 = $request->input('product_info_1');
$product->product_info_2 = $request->input('product_info_2');
$product->user_id = auth()->user()->id;
//I KNOW IT's CRAP, but I TRIED THINGS ALONG THOSE LINES:
//$diagnosis->client_id = $client_id; //NB: if I write $diagnosis->client_id = 'whatever'; it works
$diagnosis->save();
//redirect to client.index view
return redirect('/clients')->with('success','New patient diagnosis (-es) created');
}