رفتن به مطلب
انجمن پشتیبانی لاراول ایران

Amir_Kh1984

کاربر
  • تعداد ارسال ها

    33
  • تاریخ عضویت

  • آخرین بازدید

  • Days Won

    9

تمامی ارسال های Amir_Kh1984

  1. سلام می توانید از لینک های زیر استفاده کنید: https://ditty.ir/posts/repository-pattern-in-laravel-part-1/XOjjn https://ditty.ir/posts/repository-pattern-in-laravel-part-2/5d1En موفق باشید.
  2. سلام از کدهای زیر به ترتیب استفاده کنید: composer update composer require laravel/ui php artisan ui vue --auth امیدوارم که این پاسخ مشکل را بر طرف کرده باشد. موفق باشید.
  3. سلام احتمالا شما فایل CSS مربوط به Bootstrap را به صفحه اضافه نکردید.
  4. سلام می توانید از این آموزش استفاده کنید: http://jsmaster.ir/آموزش-اتصال-laravel-به-شبکه-پرداخت-پِی/
  5. سلام ابتدا وارد Command Prompt شوید و با توجه به مسیر نصب WampServer دستور زیر را وارد کنید: cd C:\wamp64\www حال با استفاده از دستور زیر پروژه جدید به نام blog ایجاد کنید: laravel new blog البته می توانید با استفاده از Composer یک پروژه ایجاد کنید: composer create-project --prefer-dist laravel/laravel blog ظاهرا شما نام پروژه را وارد نکردید. امیدوارم که این پاسخ مشکل شما را حل کرده باشد. موفق باشید.
  6. سلام ابتدا وارد مدل Order شده و متد products را بصورت زیر ویرایش کنید: class Order extends Model { public function products() { return $this->belongsToMany(Product::class) ->withPivot('quantity'); } } سپس متد orders در مدل Product را ویرایش کنید: class Product extends Model { public function orders() { return $this->belongsToMany(Order::class)->withPivot('quantity'); } } حال برای درج در جدول محور (pivot) بدین صورت عمل کنید: $order = Order::create($orderData); $productID = is_array($request->get('productID')) ? $request->get('productID') : []; $quantityID = is_array($request->get('quantityID')) ? $request->get('quantityID') : []; $attatchData = array(); foreach ($i = 0; $i < count($productID); $i++) $attatchData[$productID[$i]] = ['quantity' => $quantityID[$i]]; /* $productID = [1, 2, 3] $quantityID = [20, 40, 50] $attatchData = [ '1' => [ 'quantity' => 20], '2' => [ 'quantity' => 40], '3' => [ 'quantity' => 50], ]; */ $order->products()->attach($attatchData); ابتدا باید مقادیر productID و quantityID را در آرایه جدیدی به نام attatchData بدین صورت قرار دهید ؛ یک آرایه انجمنی با کلید های productID و مقادیری بصورت آرایه ( [ quantity' => 20'] ) . با فرض اینکه محصول با شناسه 1 دارای تعداد 20 باشد. ( محصولات با شناسه های 2 و 3 به ترتیب دارای مقادیر 40و 50) بعد از پر کردن آرایه می توانید از متدهای ()attach و ()sync استفاده کنید. امیدوارم که این پاسخ به شما کمک کرده باشد.
  7. در مرحله اول ثبت نام شما باید نام، موبایل و ایمیل را از کاربر دریافت کنید تا ثبت نام انجام شود. کد تایید ثبت نام هم بصورت تصادفی ایجاد و در یک session ذخیره می شود. در انتهای متد ()create در کلاس RegisterController نشست را ایجاد نمایید. یک session با نام user-xxx و مقدار موبایل کاربر ایجاد می شود.(xxx شناسه (id) کاربر است) protected function create(array $data) { $user = User::create([ 'name' => $data['name'], 'phone' => $data['phone'], 'email' => $data['email'], 'password' => Hash::make($data['password']), ]); session()->put('user-' . $user->id, $data['phone']); return $user; } حال کاربر باید کد تایید را در فرم مربوطه وارد نمایید. فرض بر آن است که مسیر (Route) مربوطه را در فایل web.php بصورت زیر تعریف کرده باشید. Route::get('/register/verify/{user}', 'UserController@verify')->middleware('check-verify')->name('register.verify'); در میان افزار CheckVerify باید بررسی کنید که آیا کاربر در مدت زمان لازم کد تایید را وارد کرده یا خیر. با اندکی تغییر در کد قبلی (تابع ()handle ) می توانید این کار را انجام دهید. پیشنهاد می کنم که خودتان کد نویسی کنید تا مفاهیم را بهتر یاد بگیرید. موفق باشید.
  8. سلام در صورتیکه بخواهید فیلد phome به جدول users اضافه کنید باید متغیر fillable$ در کلاس User را بصورت زیر اصلاح کنید. protected $fillable = [ 'name', 'email', 'password', 'phone' ]; سپس وارد کلاس App\Http\Controllers\Auth\RegisterController شوید و متد ()create را ویرایش کنید: return User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), 'phone' => $data['family'], ]); نیازی به استفاده از میان افزار Midlleware نیست.اصولا زمانی که بخواهید شرایط خاصی را بررسی کنید از میان افزار استفاده می کنید. برای مثال اگر شما بخواهید کاربران سایت شما در مدت زمان یک ساعت فقط یک دیدگاه برای یک پست خاص ارسال کنند می توانید از یک میان افزار به نام AllowComment بصورت زیر استفاده کنید: namespace App\Http\Middleware; use Carbon\Carbon; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class AllowComment { public function handle($request, Closure $next) { if (auth()->check()) { //dd($request->post_id); $post_id = $request->post_id; $max_count =1; $max_time = 60; $first = Carbon::now()->subMinutes($max_time); $count = auth()->user()->comments() ->where('post_id', $post_id) ->where('created_at', '>=', $first)->count(); if ($count < $max_count) return $next($request); } $msg ='your error message'; return redirect()->back()->with('invalid', $msg); } } امیدوارم که این پاسخ به شما کمک کرده باشد. موفق باشید.
  9. سلام برای حذف می توانید از تابع ()unset بصورت زیر استفاده کنید. public function drop(Request $request) { $cart = session()->get('cart'); $id = $request->id; if(isset($cart[$id])) { unset($cart[$id]); // update session session()->put('cart', $cart); if (!sizeof($cart)) { session()->put('cart', []); session()->forget('cart'); } return true; } return false; } از تابع ()forget برای حذف کل session استفاده می شود. برای حذف یک عنصر از session کافی است از تابع ()unset استفاده کنید.
  10. سلام شما باید از تابع ()isset استفاده کنید: if(! isset(session()->get('total')[33])) { } کلا در زبان PHP برای بررسی وجود/عدم وجود یک متغیر باید از تابع ()isset استفاده کنید.
  11. سلام همانطور که گفتم شما باید روابط یک به چند را برای جداول دسته بندی (categories) و تصاویر (images) و همچنین تصویر و برچسب (tags) را پیاده سازی نمایید. بعد از پیاده سازی آنها از کد زیر استفاده کنید تا در یک جدول مقادیر id و name و تصاویر و هم چنین برچسب ها(بدون تکرار) را نمایش دهد. <table> <tr> <th>id</th> <th>name</th> <th>images</th> <th>tags</th> </tr> @foreach($categories as $category) <tr> <td>{{ $category->id }}</td> <td>{{ $category->name }}</td> <td> @php $pics = []; @endphp @foreach($category->images()->pluck('src') as $src) $pics[] = $src; @endforeach {{ implode(',', $pics) }} </td> <td> @php $tags = []; @endphp @foreach($category->images()->get() as $image) @foreach($image->tags()->pluck('name') as $name) $tags[] = $name; @endforeach @endforeach {{ get_tags($tags) }} </td> </tr> @endforeach </table> تابع برای حذف عناصر تکراری از یک آرایه بصورت زیر تعریف شده است: function get_tags($tags) { $result = array(); for ($tags as $tag) { if (!in_array($tag, $result)) $result[] = $tag; } return implode(',', $result); } امیدوارم که این پاسخ مشکل شما را برطرف کرده باشد. موفق باشید.
  12. سلام لطفا کدهای سمت server را هم قرار دهید. در سمت server شما باید مقادیر success و data را ارسال کنید تا به آنها دسترسی داشته باشید. اگر شما بخواهید مقدار value و id را بازیابی کنید نیازی به ajax ندارید. به راحتی با یک دستور ساده jQuery می تواندید هر اطلاعاتی از صفحه را بدست آورید. اصولا زمانی از ajax استفاده می کنید که بخواهید اطلاعاتی را از بانک اطلاعاتی یا یک منبع خارجی (فایل json یا html و... ) استخراج کنید. وقتی شما id هر سطری را بصورت ایستا (static) به سطر (tr) نسبت دهید برای بازیابی آن به ajax نیازی نیست. اگر راجب هدفتون بیشتر توضیح دهید فکر می کنم بهتر بتونم کمک کنم. $('.quantity').change(function (e) { e.preventDefault(); var $this = $(this); var value = $this.val(); var id = $this.parents('tr').attr('id'); alert('value:' + value + ' id:' + id); }); موفق باشید.
  13. سلام اگر بخواهید برای یک دسته بندی (category) خاص تمامی تصاویر مرتبط با انرا بازیابی کنید باید از رابطه یک به چند بین دسته بندی و تصویر استفاده کنید. همین طور برای تصویر و برچسب (tag). اگر هدفتان بازیابی تمامی برچسب های متعلق به یک دسته بندی خاص باشد(جدول تصویر به عنوان واسط) می توانید از رابطه HasManyThrough در مدل Category استفاده کنید. البته می توانید از هر دوی آنها بصورت همزمان استفاده کنید.در حالت کلی بسته به نیازتان می توانید از این روابط استفاده کنید. برای مثال اگر جدول categories شما ستون های id، name، slug و parent داشته باشد و بخواهید از دسته بندی های تو در تو (یک سطحی و یا چند سطحی) استفاده کنید، می توانید یک رابطه یک به چند در داخل مدلCategory تعریف کنید. فرضا اگر بخواهید تمام دسته بندی هایی که زیر مجموعه یک دسته بندی خاص هستند را بدست آورید می توانید تابع children را بصورت زیر تعریف کنید: public function children () { return $this->hasMany(Category::class, 'parent'); } در صورتیکه شما برای یک دسته بندی خاص تابع را فرخوانی کنید، تمام دسته بندی هایی که مقدار فیلد parent آنها با فیلد id دسته بندی مورد نظر برابر باشد، بازیابی می شود. در قطعه کد زیر فرض بر آن است که هر دسته بندی حداکثر یک زیر مجموعه دارد.(پیاده سازی دسته بندی های چند سطحی با استفاده از توابع بازگشتی امکان پذیر است که خارج از حوصله این پست است) <ul> @foreach($categories As $category) <li id='{{ $category->id }}'>{{ $category->name }} @if($category->children) @php $sub_cats = $category->children()->select('id', 'name')->get(); @endphp <ul> @foreach($sub_cats As $sub_cat) <li id='{{ $sub_cat->id }}'>{{ $sub_cat->name }}</li> @endforeach </ul> @endif </li> @endforeach </ul> امیدوارم که این پاسخ مشکل شما را برطرف کرده باشد. موفق باشید.
  14. سلام برای راست چین کردن قالب شما باید دانش کافی در زمینه CSS داشته باشید. اگر از Bootstrap استفاده می کنید باید فایل راست چین شده آن را به صفحه خود اضافه کنید.(البته بعد از اضافه کردن فایل bootstrap.min.css) با یک جستجو می توانید فایل راست چین شده بوت استرپ را پیدا کنید. ثانیا شما باید خود قالب را راست چین نمایید. معمولا اگر خاصیت float عنصری را به right تغییر دهید و تنظیماتی از این قبیل (تغییر margin ، padding ، border-radius و ..... ) به راحتی می توانید قالب را راستچین نمایید. یک فایل راست چین شده بوت استرپ را برای شما قرار دادم. امیدوارم که این پاسخ مشکل شما را حل کرده باشد. موفق باشید. rtl.zip
  15. ابتدا حافظه cache مرورگر را پاک کنید. php artisan config:cache در صورت عدم حل مشکل، فرم را در جای دیگری (صفحه دیگر) قرار دهید و مجددا امتحان کنید. یا اینکه به جای متد post از متد get استفاده کنید و نتیجه را بررسی کنید. کلا باید با سعی و خطا مشکل را حل کنید. بازهم تاکید می کنم که فرم شما هیچ مشکلی نداره!!! مشکل از جای دیگه است..... درگیر شدن با خطا ها لازمه یادگیری و کسب مهارت در برنامه نویسی است.....
  16. سلام منظور شما از "کار نمیکنه" دقیقا چیه؟ آیا اطلاعات فرم به سرور ارسال می شوند؟ چرا خاصیت action فرم را برابر با www.google.com قرار دادید؟ (هر چند که این مقدار باعث این مشکل [عدم ارسال فرم] نشده!!) آیا خطایی از سمت لاراول دریافت می کنید؟ ظاهرا فرم شما هیچ مشکلی نداره!! احتمالا مشکل از جای دیگه هست. کلا برای ارسال اطلاعات با فرم شما ابتدا باید مسیر (route) مربوطه را تعریف و در قسمت action فرم مقدار انرا تنظیم نمایید. لطفا سوال را با جزئیات بیشتری مطرح کنید.
  17. سلام ابتدا مسیر (route) درخواست را بصورت زیر تغییر دهید. Route::get('/regist', function (Illuminate\Http\Request $request) { if($request->ajax()) return \Illuminate\Support\Facades\Response::json($request->all()); return \Illuminate\Support\Facades\Response::json(false); }); توضیح اینکه اولا از متد get استفاده کنید. ثانیا شی request$ را به عنوان آرگومان تابع (Closures) قرار دهید. حال تابع ajax را بصورت زیر ویرایش کنید. $.ajax( { type : 'get', url : "{{ url('/regist') }}", data : { fname : fname }, success : function(data) { alert(data.fname); } }); از متد get استفاده کنید و در بدنه تابع success با استفاده از آرگومان data فقط به مقادیری دسترسی خواهید داشت که آنها را به سرور ارسال کردید.(کاملا مشخه که دسترسی به مقداری که وجود نداره undefined هست!) امیدوارم که این پاسخ مشکل شما را برطرف کرده باشد. موفق باشید.
  18. اگر بخواهید با هر بار کلیک به تعداد محصول یک واحد اضافه بشه باید از کد زیر استفاده کنید. if(!isset($cart[$id])) { $cart[$id] = [ "id" => $id, "title" => $product->title, "price" =>$product->price, "quantity" => 1 ]; session()->put('cart', $cart); } else { $cart = session()->get('cart'); $cart[$id]['quantity']++; session()->put('cart', $cart); } ضمنا هر طوری که شما بخواهید می توانید سبد خرید را پیاده سازی کنید. می توانید همانند سایت های خرید انلاین بعد از افزودن محصول به سبد خرید قسمتی را برای افزایش یا کاهش تعداد محصول قرار دهید. امیدوارم که این پاسخ مشکل را برطرف کرده باشد. موفق باشید.
  19. سلام ابتدا باید وجود یا عدم وجود session را بررسی کنید. در صورت موجود نبون آنرا ایجاد کنید. if (!session()->get('cart')) session()->put('cart', []); $cart = session()->get('cart'); حال باید بررسی کنید که آیا محصول جدید در سبد خرید وجود دارد یا خیر؟ if(!isset($cart[$id])) { $cart[$id] = [ "id" => $id, "title" => $product->title, "price" =>$product->price, "quantity" => 1 ]; session()->put('cart', $cart); } فکر کنم مشکل کد شما این باشه که session بنام sessionBasket را ایجاد نکردید!!! من از همین کدهای فوق در سبد خرید پروژه خودم استفاده کردم و نتیجه گرفتم. برای حذف یک محصول از سبد خرید هم می توانید از کد زیر استفاده نمایید. if(isset($cart[$id])) { $cart = session()->get('cart'); unset($cart[$id]); // update session session()->put('cart', $cart); if (!sizeof($cart)) { session()->put('cart', []); session()->forget('cart'); } } امیدوارم که این پاسخ مشکل شما را حل کرده باشد. موفق باشید.
  20. با سلام آیا منظور شما از "اپدیت دیتابیس" این هست که در هنگام بازیابی داده ها در Controller مدنظر با این خطا مواجه می شوید؟؟ در صورت مثبت بودن پاسخ شما باید داده هایی را که از پایگاه داده دریافت کردید، را اعتبار سنجی نمایید. برای مثال فرض کنید می خواهید نوشته ای (post) با شناسه (id) یک را از بانک اطلاعاتی بازیابی کنید. می توانید از کدی شبیه زیر استفاده کنید. دقت کنید که بعد از دریافت اطلاعات، مقدار post$ بررسی شده در صورت عدم وجود(null بودن) به صفحه خطای 404 هدایت می شوید. $post = DB::table('posts')->find(1); if (!$post) abort(404); return view('front.post', compact('post')); کلا زمانیکه شما بخواهید به مقدار خاصیت (property) یک شی (Object) که وجود ندارد،(مقدار شی برابر null است) دسترسی داشته باشید با چنین خطایی مواجه می شوید. امیدوارم که این پاسخ مشکل شما را حل کرده باشد.
  21. سلام شما برای این کار باید یک میان افزار (Middleware) ایجاد نمایید. سپس برای تمامی مسیرها (Route) از این میان افزار استفاده کنید. با استفاده از artisan یک میان افزار به نام CheckLogin ایجاد نمایید. php artisan make:middleware CheckLogin میان افزار ایجاد شده را در مسیر app/Http/Kernel.php در انتهای آرایه routeMiddleware$ با نام اختیاری check-login ثبت (Register) نمایید. 'check-login' => \App\Http\Middleware\CheckLogin::class, حال از route های زیر در web.php استفاده نمایید. Auth::routes(); // for home page Route::get('/', 'HomeController@index')->name('home'); Route::middleware('check-login')->group(function() { // insert all routes here // for example.... Route::get('/faq', 'HomeController@faq')->name('home.faq'); Route::get('/search/tag/{tag}', 'SearchController@tag')->name('home.tag'); }); در انتها کافی است متد ()handle را به صورت زیر ویرایش کنید. public function handle($request, Closure $next) { return redirect()->to('login'); } حال کاربر به جز صفحه اصلی سایت، به تمامی صفحات سایت بدون لاگین دسترسی ندارد. امیدوارم که این پاسخ مشکل شما را حل کرده باشد.
  22. برای اجرای کوئری مد نظر ابتدا یک migration ایجاد و آنرا migrate نمایید. سپس بدنه تابع ()up را پاک و به جای آن کد زیر را قرار دهید. public function up() { $statement = "ALTER TABLE table_name AUTO_INCREMENT = 1000"; \Illuminate\Support\Facades\DB::unprepared($statement); } بعد از اجرا، مقدار ستون id با مقدار اولیه 1000 شروع می شود. من در لاراول نسخه 6 کد بالا را آزمایش کردم و جواب گرفتم. برای اطلاع بیشتر می توانید به پیوند زیر مراجعه نمایید. https://stackoverflow.com/questions/34196045/set-auto-increment-field-start-from-1000-in-migration-laravel-5-1 در مورد کوئری اول هم می توانید از دستور زیر استفاده نمایید. $records = DB::select('select * from user'); var_dump(records); // using parameter $records = DB::select('select * from user where id = ?', [3]); var_dump(records); امیدوارم که این پاسخ ها مشکل شما را حل کرده باشد. موفق باشید.
  23. فایل fa.js در مسیر src/langs قرار دارد که به طور پیش فرض مقدار خاصیت dir_ به rtl تنظیم شده است. لذا نیازی به قرار دادن کد مدنظر نیست. اما در صورت نیاز می توانید آنرا بعد از استفاده از متد ()trumbowyg قرار دهید. من این ویرایشگر را دانلود کردم و مشکلی در راستچین کردن آن نداشتم. تمام منوها در سمت راست ظاهر شدند و نوشتی ها هم راستچین شدند.(حتما خاصیت direction تگ body را برابر rtl قرار دهید) پیشنهاد می کنم از ویرایشگرهای معروفی مثل CKEditor یا TinyMCE استفاده کنید که خیلی راحت تر می توانید با انها کار کنید. موفق باشید.
  24. ابتدا زبان را به فارسی تغییر دهید. $('textarea').trumbowyg({ lang: 'fa' }); سپس direction را بصورت زیر تنظیم نمایید. jQuery.trumbowyg.langs.fa = { _dir: "rtl" // Changes the editor dir }; پیشنهاد می کنم برای پاسخ هر سوالی به مستندات سایت رجوع کنید. چون بهترین منبع برای یادگیری همان سایت اصلی است. منبع : https://alex-d.github.io/Trumbowyg/documentation/#add-localization
  25. با استفاده از دستور dd($request) می توان تمام اطلاعات شی request$ را بدست آورد. برای بازیابی هر یک از خواص آن از چه متدی باید استفاده کرد؟ من قصد دارم در تابع handle میان افزار CheckRole با بدست آوردن مقدار خاصیت requestUri پردازشی انجام دهم. (اگر کاربر معمولی لاگین کرده اجازه دسترسی به پنل مدیریت ادمین را به کاربر معمولی ندهد) سوال دیگر اینکه آیا بررسی این موضوع باید در همین میان افزار انجام شود؟
×
×
  • جدید...