ثبت نام کاربر در جدول مجزا
سلام
من با لاراول 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']),
]);
}
}
کسی از دوستان میدونه مشکل از کجاست؟
تشکر.
نقل قول: ثبت نام کاربر در جدول مجزا
نقل قول: ثبت نام کاربر در جدول مجزا
من هیوقت جدا نکردم تیبل های یوزر ور اینجوری نمیدونم مشکل چیه
ولی به نظر میاد که پارامتر به تابع کریت ارسال نمیشه یه مقدار دیفالت بده به آرگومانت و توی تابع dd($data) بزن اول کریت ببین چی توشه
protected function create(array $data = [] )
{
dd($data);
من پیشنهاد میکنم ساختارت رو عوض کنی بجای اینکه 2 تا تایبل برای کاربر ها بسازی از همون 1 تیبل users استفاده کنی بعد یه user_type بهش اضافه کنی
مشخصات شرکت رو هم بریزی توی یک تیبل جدا به اسم companies
کلا تیبل یوزر برای احراز هویت کاربر هستش ربطی به شرکت یا غیر شرکت بودنش نداره اون رو میتونی تو تیبل دیگه بریزی
نقل قول: ثبت نام کاربر در جدول مجزا
نقل قول:
نوشته شده توسط
plague
من هیوقت جدا نکردم تیبل های یوزر ور اینجوری نمیدونم مشکل چیه
ولی به نظر میاد که پارامتر به تابع کریت ارسال نمیشه یه مقدار دیفالت بده به آرگومانت و توی تابع 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
نقل قول: ثبت نام کاربر در جدول مجزا
ظاهرا password نیست تو خروجی همچنین id توی لیست هست که نباید باشه !
حالا از این که بگزریم خروجی باید یه آرایه باشه ولی شما یه رشته جیسون گزاشتی
کلا عجیبه نتیجه دامپ یجای کارت مشکل داره
نقل قول: ثبت نام کاربر در جدول مجزا
نقل قول:
نوشته شده توسط
plague
ظاهرا password نیست تو خروجی همچنین id توی لیست هست که نباید باشه !
حالا از این که بگزریم خروجی باید یه آرایه باشه ولی شما یه رشته جیسون گزاشتی
کلا عجیبه نتیجه دامپ یجای کارت مشکل داره
آی دی رو فکر میکنم برای این میگیره که این دومین یوزری هست که داره ثبت نام میکنه آی دی بصورت خودکار اضافه میشه که مشخص کنه یوزر توی کدوم ردیف ذخیره میشه.
خروجی رو هم دقیقا طبی چیزی که روی مرورگر اومد من کپی کردم اینجا. :متفکر:
نقل قول: ثبت نام کاربر در جدول مجزا
احیانا آخر تابع create بعد از ریختن تو دیتابیس دامپ نکردی ؟
شما باید اولش قبل از ریختن تو دیتبایس دامپ کنی
نقل قول:
آی دی رو فکر میکنم برای این میگیره که این دومین یوزری هست که داره ثبت نام میکنه آی دی بصورت خودکار اضافه میشه که مشخص کنه یوزر توی کدوم ردیف ذخیره میشه.
وقتی توی دیتابیس نریخته آیدی هم تولید نمیشه و توی دامپ هم ظاهر نمیشه مگه اینکه اول ریخته باشی تو دیتبایس بعد دامپ کرده باشی که قرار نبوده اینکار رو بکنی
همچنین مطمئن شو که داری همین کنترلر رو فراخانی میکنی نه کنترلر دیفالت ثبت نام رو
نقل قول: ثبت نام کاربر در جدول مجزا
نقل قول:
نوشته شده توسط
plague
احیانا آخر تابع create بعد از ریختن تو دیتابیس دامپ نکردی ؟
شما باید اولش قبل از ریختن تو دیتبایس دامپ کنی
وقتی توی دیتابیس نریخته آیدی هم تولید نمیشه و توی دامپ هم ظاهر نمیشه مگه اینکه اول ریخته باشی تو دیتبایس بعد دامپ کرده باشی که قرار نبوده اینکار رو بکنی
همچنین مطمئن شو که داری همین کنترلر رو فراخانی میکنی نه کنترلر دیفالت ثبت نام رو
سلام،
دامپ کردم دیتا رو چیزی رو بر نمیگردونه! این نتیجه دامپ بود:
اگر کدهای create رو نگه دارم و دامپ کنم این ارور رو میده
کد HTML:
Undefined index: company_name
2 ضمیمه
نقل قول: ثبت نام کاربر در جدول مجزا
سلام مجدد،
من یکسری تغییرات در ساختار کنترلر دادم که الان به این شکل در اومده:
<?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- تمام فیلدهای ثبت نام توی دیتابیس ذخیره میشن بجز فیلد پسوورد! توی تصویر دامپ هم اگر نگاه کنید رمزعبور ذخیره نشده!
نقل قول: ثبت نام کاربر در جدول مجزا
خب چرا پسورد رو مثل بقیه اینپوت ها ننوشتی ؟
Input::get('password')
یا
$request->input('password')