ورود

View Full Version : ثبت نام کاربر در جدول مجزا



robertnicjoo
دوشنبه 01 خرداد 1396, 05:23 صبح
سلام
من با لاراول 5.4 کار میکنم و از auth استفاده میکنم همچنین کاربر دومی در اپلیکیشن خودم دارم در جدول companies که این کاربرها در کنار هم بخوبی کار می کنند منتها مشکل من در ثبت نام از کاربر دوم که company باشه است موقع ثبت نام کاربر به عنوان شرکت این پیغام خطا رو دریافت میکنم:


Type error: Too few arguments to function App\Http\Controllers\Auth\CompanyRegisterControlle r::create(), 0 passed and exactly 1 expected


کد کنترلر ثبت نام هم این هست:


<?php

namespace App\Http\Controllers\Auth;

use Illuminate\Http\Request;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class CompanyRegisterController extends Controller
{

/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = 'companies';

public function __construct() {
$this->middleware('guest:company');
}

protected function index()
{
return view('auth.company-register');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'company_name' => 'required|string|max:255',
'manager_name' => 'required|string|max:255',
'address' => 'required|string|max:255',
'username' => 'required',
'email' => 'required|string|email|max:255|unique:users',
'about' => 'sometimes|min:10|max:2000',
'password' => 'required|string|min:6|confirmed',
]);
}

/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
protected function create(array $data)
{
return Company::create([
'company_name' => $data['company_name'],
'manager_name' => $data['manager_name'],
'address' => $data['address'],
'username' => $data['username'],
'about' => $data['about'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
}

کسی از دوستان میدونه مشکل از کجاست؟


تشکر.

robertnicjoo
سه شنبه 02 خرداد 1396, 06:13 صبح
دوستان کسی نظری نداره؟!

plague
سه شنبه 02 خرداد 1396, 18:46 عصر
من هیوقت جدا نکردم تیبل های یوزر ور اینجوری نمیدونم مشکل چیه
ولی به نظر میاد که پارامتر به تابع کریت ارسال نمیشه یه مقدار دیفالت بده به آرگومانت و توی تابع dd($data) بزن اول کریت ببین چی توشه


protected function create(array $data = [] )
{
dd($data);



من پیشنهاد میکنم ساختارت رو عوض کنی بجای اینکه 2 تا تایبل برای کاربر ها بسازی از همون 1 تیبل users استفاده کنی بعد یه user_type بهش اضافه کنی
مشخصات شرکت رو هم بریزی توی یک تیبل جدا به اسم companies

کلا تیبل یوزر برای احراز هویت کاربر هستش ربطی به شرکت یا غیر شرکت بودنش نداره اون رو میتونی تو تیبل دیگه بریزی

robertnicjoo
پنج شنبه 04 خرداد 1396, 11:05 صبح
من هیوقت جدا نکردم تیبل های یوزر ور اینجوری نمیدونم مشکل چیه
ولی به نظر میاد که پارامتر به تابع کریت ارسال نمیشه یه مقدار دیفالت بده به آرگومانت و توی تابع dd($data) بزن اول کریت ببین چی توشه


protected function create(array $data = [] )
{
dd($data);



من پیشنهاد میکنم ساختارت رو عوض کنی بجای اینکه 2 تا تایبل برای کاربر ها بسازی از همون 1 تیبل users استفاده کنی بعد یه user_type بهش اضافه کنی
مشخصات شرکت رو هم بریزی توی یک تیبل جدا به اسم companies

کلا تیبل یوزر برای احراز هویت کاربر هستش ربطی به شرکت یا غیر شرکت بودنش نداره اون رو میتونی تو تیبل دیگه بریزی


ممنون از پاسخ دامپ دیتا کردم الان مشخصات رو بهم برمیگردونه


{"company_name":"sdfwef","manager_name":"ewfwef","username":"wefwef","email":"ewfewf","updated_at":"2017-05-25 14:02:18","created_at":"2017-05-25 14:02:18","id":2}

اما اگر به حالت اولیه برش گردونم این ارور رو میده :


Type error: Too few arguments to function App\Http\Controllers\Auth\CompanyRegisterControlle r::create(), 0 passed and exactly 1 expected

plague
پنج شنبه 04 خرداد 1396, 17:18 عصر
ظاهرا password نیست تو خروجی همچنین id توی لیست هست که نباید باشه !
حالا از این که بگزریم خروجی باید یه آرایه باشه ولی شما یه رشته جیسون گزاشتی
کلا عجیبه نتیجه دامپ یجای کارت مشکل داره

robertnicjoo
پنج شنبه 04 خرداد 1396, 18:00 عصر
ظاهرا password نیست تو خروجی همچنین id توی لیست هست که نباید باشه !
حالا از این که بگزریم خروجی باید یه آرایه باشه ولی شما یه رشته جیسون گزاشتی
کلا عجیبه نتیجه دامپ یجای کارت مشکل داره


آی دی رو فکر میکنم برای این میگیره که این دومین یوزری هست که داره ثبت نام میکنه آی دی بصورت خودکار اضافه میشه که مشخص کنه یوزر توی کدوم ردیف ذخیره میشه.
خروجی رو هم دقیقا طبی چیزی که روی مرورگر اومد من کپی کردم اینجا. :متفکر:

plague
پنج شنبه 04 خرداد 1396, 19:13 عصر
احیانا آخر تابع create بعد از ریختن تو دیتابیس دامپ نکردی ؟
شما باید اولش قبل از ریختن تو دیتبایس دامپ کنی

آی دی رو فکر میکنم برای این میگیره که این دومین یوزری هست که داره ثبت نام میکنه آی دی بصورت خودکار اضافه میشه که مشخص کنه یوزر توی کدوم ردیف ذخیره میشه.
وقتی توی دیتابیس نریخته آیدی هم تولید نمیشه و توی دامپ هم ظاهر نمیشه مگه اینکه اول ریخته باشی تو دیتبایس بعد دامپ کرده باشی که قرار نبوده اینکار رو بکنی

همچنین مطمئن شو که داری همین کنترلر رو فراخانی میکنی نه کنترلر دیفالت ثبت نام رو

robertnicjoo
دوشنبه 08 خرداد 1396, 03:33 صبح
احیانا آخر تابع create بعد از ریختن تو دیتابیس دامپ نکردی ؟
شما باید اولش قبل از ریختن تو دیتبایس دامپ کنی

وقتی توی دیتابیس نریخته آیدی هم تولید نمیشه و توی دامپ هم ظاهر نمیشه مگه اینکه اول ریخته باشی تو دیتبایس بعد دامپ کرده باشی که قرار نبوده اینکار رو بکنی

همچنین مطمئن شو که داری همین کنترلر رو فراخانی میکنی نه کنترلر دیفالت ثبت نام رو

سلام،
دامپ کردم دیتا رو چیزی رو بر نمیگردونه! این نتیجه دامپ بود:


[]

اگر کدهای create رو نگه دارم و دامپ کنم این ارور رو میده

Undefined index: company_name

robertnicjoo
دوشنبه 08 خرداد 1396, 04:09 صبح
سلام مجدد،

من یکسری تغییرات در ساختار کنترلر دادم که الان به این شکل در اومده:


<?php

namespace App\Http\Controllers\Auth;

use App\Company;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Input;
use Illuminate\Http\Request;
use Hash;

class CompanyRegisterController extends Controller
{

/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = 'companies';

public function __construct() {
$this->middleware('guest:company');
}

protected function index()
{
return view('auth.company-register');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'company_name' => 'required|string|max:255',
'manager_name' => 'required|string|max:255',
'username' => 'required',
'email' => 'required|string|email|max:255|unique:companies',
'password' => 'required|string|min:6|confirmed',
]);
}

/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
protected function create(Request $request)
{
return Company::create([
'company_name' => Input::get('company_name'),
'manager_name' => Input::get('manager_name'),
'username' => Input::get('username'),
'email' => Input::get('email'),
'password' => Hash::make($request->Password)
]);
}
}


145340 145341

منتها دو تا مشکل کوچیک هست،
1- بعد از ثبت نام دامپ دیتا رو نشون میده که من اصلا کد dd ندارم توی کنترلم
2- تمام فیلدهای ثبت نام توی دیتابیس ذخیره میشن بجز فیلد پسوورد! توی تصویر دامپ هم اگر نگاه کنید رمزعبور ذخیره نشده!

plague
دوشنبه 08 خرداد 1396, 16:39 عصر
خب چرا پسورد رو مثل بقیه اینپوت ها ننوشتی ؟

Input::get('password')
یا


$request->input('password')