آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

آموزش فریمورک لاراول

CodeMaster  7 سال پیش  7 سال پیش
+37 0

سلام دوستان عزیز

به لطف آموزشهای استاد و البته تلاش های خودم (D:) الان چند ماهی هستش که توی یک شرکت فرانسوی مشغول بکارم و البته نمی خوام کلاس بزارم بلکه خواستم از استاد عزیز تشکر کنم که راه پیشرفت من رو باز کردن و قطعا هرگونه پیشرفتی در زندگی من رخ بده مدیون ایشون خواهم بود.

حالا بعد از کار کردن پروژه های مختلف روی فریمورک لاراول احساس کردم که شاید دوستان دیگه ای هم باشن که علاقه داشته باشن کار با این فریمورک فوق العاده رو یاد بگیرن و برای همین تصمیم گرفتم تا جایی که زمانم بهم اجازه میده یکسری آموزش برای یادگیری و استفاده از این فریمورک بزارم تا کسانی که علاقمند هستند بتونن استفاده ببرن.

نمی دونم آموزشها چند قسمت بشه و چقدر طول بکشه ولی تلاش میکنم که تا اونجایی که میشه اکثر مباحث رو پوشش بدم. اگر ایرادی هم دیدید حتما بهم اطلاع بدید.

 

+4 0
سلام و درود؛ واقعا کار شما ارزش زیادی داره؛ حیف که فقط میتونم برای تشکر از لایک استفاده کنم! (7 سال پیش)
 برای این سوال 13 پاسخ وجود دارد.
پاسخ به سوال 
CodeMaster  7 سال پیش
+10 0

لاراول چیست ؟

لاراول یک فریمورک برای زبان PHP هستش که در سال 2011 توسط آقای Taylor Otwell توسعه داده شد. این فریمورک به طور زیادی از فریمورک Ruby on Rails که برای زبان Ruby نوشته شده الهام گرفته شده است. در واقع بسیاری از امکانات امروزی این فریمورک قبلا در Rails پیاده سازی شده بود. آقای Otwell با این هدف که برنامه نویسان باید بیش از هرچیزی تمرکزشون رو برروی نیاز نرم افزار بزارند تا اینکه بخوان وقتشون رو صرف کارهای دیگه بکنن این فریمورک فوق العاده رو ساخت. جالبه که این فریمورک در حالیکه حدود 5 سال از عمرش میگذره به سرعت رشد کرد و تبدیل به محبوبترین فریمورک PHP در دنیا شد. فریمورک هایی مثل code igniter , symphony,yii,zend  که فریمورک های قدیمی محسوب میشن الان در رتبه های پایین تر از لاراول با اختلاف زیادی قرار دارند. البته بد نیست به این اشاره کنم که core لاراول بر پایه فریمورک سیمفونی هستش. اما فرق لاراول با سیمفونی در امکانات بیشتر لاراول در کنار راحتی استفاده است.

چند ویژگی بارز لاراول که باعث میشه فوق العاده محبوب و کارآمد باشه :

- IOC Container (برای مدیریت Dependency ها)

- Eloquent ORM

- Blade Template Engine

-Events and Jobs

- Routing

-Validation

و ...

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

0 0
راستش من با نظر استاد موافقم که باید فریمورک رو خودمون با توجه به نیاز و کاربردمون از صفر بنویسیم. من هم میخوام با این فریمورک آشنا بشم تا امکانات مفیدش رو به فریمورک شخصی ام اضافه کنم (7 سال پیش)
پاسخ به سوال 
CodeMaster  7 سال پیش
+10 0

نصب لاراول

برای نصب لاراول نیاز هستش که Composer رو روی سیستم خودتون نصب کنید. Composer یک Dependency manager هستش که در واقع شما پکیج هایی که پروژتون نیاز داره رو با استفاده از اون ایمپورت میکنید. نکته فوق العاده در رابطه با Composer داشتن Autoload هستش یعنی شما لازم نیست کار خاصی انجام بدید و پکیج رو نصب کنید، تنظیماتش رو انجام بدید و ازش استفاده کنید.

بعد از اینکه Composer رو نصب کردید با استفاده از cmd وارد مسیری بشید که میخواید پروژه جدیدتون رو بسازید بشید و دستور زیر رو در cmd بنویسید:

 composer create-project --prefer-dist laravel/laravel filename

به جای filename اسم پوشه ای که میخواید لاراول باهاش نصب بشه رو بدید و Composer شروع به دانلود و نصب لاراول میکنه. بعد از مدتی نصب تموم میشه و شما میتونید با استفاده از دستور  : 

 php artisan serve

سایتتون رو بالا بیارید. در حالت معمول بعد از زدن دستور بالا سایت روی آدرس localhost:8000 شروع به کار میکنه.  حالا اگر به آدرس داده شده برید میبینید که سایت داره کار میکنه! 

توجه داشته باشید که من در این آموزش از آخرین ورژن لاراول یعنی ورژن 5.3 استفاده میکنم.\

در مورد دستور artisan هم بعدا صحبت خواهم کرد و توضیحات کاملی درموردش خواهم داد.

یک چیز دیگه اینکه اون دسته از دوستانی که روی لینوکس و یا مک کار میکنن ممکنه سایت واسشون بالا نیاد علتش هم نداشتن permission هستش که با دستور زیر میتونید این مشکل رو رفع کنید:

 sudo chmod -R 777 dirname

در دستور بالا به جای dirname اسم پوشه خودتون رو قرار بدید.

در نهایت باید بعد از رفتن به سایتتون چیزی مثل تصویر بالا براتون لود بشه.

 

0 0
سلام... ممنون از آموزش های شما... من یه پروژه رو با لاراول توسعه دادم الان برای انتقال اون به سرور چند تا سوال دارم ... ما باید چه هاستی بگیریم؟ آخه هاست های اشتراکی امکان استفاده از composer و دستورات artisan رو به ما نمیدن و ما حتما به این دو مورد نیاز داریم... البته میدونم که به یه روش غیر منطقی میشه لاراول رو روی هاست اشتراکی پیاده کرد ولی راه درستش رو میخام بدونم... آخه من فقط تا الان با هاست اشتراکی کار کردم و در سایر موارد مثل مجازی و ... نمیدونم چه کارهایی باید انجام داد... ممنون میشم پاسخی جامع هم در این زمنیه ارائه کنید... (7 سال پیش)
0 0
سلام. اصولا لاراول خیلی بدرد هاست اشتراکی نمیخوره. یعنی معمولا سایتهایی که روی هاست اشتراکی هستند سایتهایی کوچک با امکانات کم هستند. لاراول بیشتر بدرد سایتهای معمولی به بالا یعنی سطح متوسط تا enterprise کارایی اش مشخص میشه. اما در مورد گذاشتن رو هاست اشتراکی چند نکته هست که باید توجه کنید: 1- شما اصولا نه نیازی به composer و نه نیازی به artisan دارید در سرور 2- شما به هیچ وجه نباید تغییری روی سایتتون در هاست بدید بلکه باید تغییر رو در لوکال بدید و سپس به سرور منتقل کنید. دقت کنید که این کار باعث از بین رفتن خطا - جلوگیری از باگ و خطرات امنیتی داره. پس دوباره با جواب بالا میرسیم. وقتی قرار نیست روی سایتتون در سرور تغییری بدید و تمام تغییرات رو روی لوکال میدید پس نیازی ندارید که composer و artisan رو داشته باشید (7 سال پیش)
پاسخ به سوال 
CodeMaster  7 سال پیش
+10 0

ساختار دایرکتوری ها در لاراول 5.3:

وقتی لاراول رو نصب کردید وارد پوشه اش بشید با دایرکتوری های مختلفی مواجه میشید. ممکنه بعد از دیدن دایرکتوری ها به این فکر بیافتید که لاراول MVC نیستش اما اشتباه میکنید لاراول MVC هستش. در پایین به ترتیب در مورد دایرکتوری های مختلف لاراول توضیح خواهم داد:

 - app: در واقع یکی از پوشه هایی که سروکار زیادی باهاش خواهید داشت این پوشه خواهد بود. اینجا جایی هستش که شما کنترلرها، middleware ها و سایر کلاسهاتون رو میزارید. اگر وارد پوشه HTTP در این پوشه بشید دو پوشه دیگر میبینید یکی Controllers و یکی هم Middlewares که خوب از controller معلومه که چه خبره و برای چی استفاده میشه. میمونه Middlewares که اونم بعدا در رابطه باهاش صحبت خواهیم کرد. همچنین با پوشه Providers هم زیاد کارخواهیم کرد.

- bootstrap: این پوشه برای راه اندازی فریمورک هستش و کدهای راه اندازی لاراول در این پوشه قرار داره.

-config: تمام تنظیمات مربوط به بخشهای مختلف مثل App و database و ... در این پوشه قرار داره. همچنین شما میتونید فایلهای تنظیمات مخصوص به خودتون رو بسازید.

-database: در اینجا فایلهای مربوط به migration ها و seed ها قرار داره که در ادامه در موردشون بحث خواهیم کرد.

- public: جایی هستش که تمامی assets های شما قرار خواهند گرفت. تمام css,js ها و سایر asset ها در اینجا قرار خواهد گرفت.

-resources: شامل 3 پوشه است که assets محل قرار گذاری فایل های sass,coffescript و سایر فایلهایی که نیاز به کامپایل شدن دارند. قرار نیست در این آموزش با این فایل کاری داشته باشیم. پوشه بعدی lang برای زبان هستش و درنهایت views هم که مشخصا برای فایلهای view پروژتون هستش.

- routes: شامل 2 فایل web.php , api.php هستش که مفصلا در آموزش Routing بهشون میپردازم.

-sotorage,tests: کاری باهاشون نداریم. (برای ذخیره سازی دیتاهای کش، فایلهای یک بار مصرف، و تستهای پروژه بکار میرن)

-vendor: این پوشه برای composer هتسش و تمامی پکیج هایی که نصب میکنید وارد این پوشه میشوند.

و در نهایت یکسری فایل در root پروژتون میبینید که مهم ترینشون .env هستش که مبحث بعدیمون متعلق به ایشون هستش.

پاسخ به سوال 
CodeMaster  7 سال پیش
+8 0

فایل env. :

این فایل محل ذخیره تنظیمات کلی نرم افزارتون هست. مثل آدرس سایت - نام دیتابیس و ... مثلا برای اینکه به لاراول بگید اسم دیتابیستون چیه کافیه :

 DB_DATABASE = mydb
DB_USERNAME = username
DB_PASSWORD = 1234

خوب کافیه به جای DB_DATABASE اسم دیتابیس و بجای DB_USERNAME نام کاربری و DB_PASSWORD هم پسورد mysql تون رو بنویسید. دقت کنید که اگر از دستور PHP ARTISAN SERVE  استفاده کردید برای اینکه سایتتون روی لوکال تست کنید باید یک دور سرور رو stop و مجددا راه اندازی کنید. این فایل یکسری تنظیمات دیگه مثل تنظیمات مربوط به درایور سشن، تنظیمات ایمیل، تنظیمات Redis، تنظیمات صف و... رو داره که با بعضی شون بعدا آشنا خواهیم شد.

پاسخ به سوال 
CodeMaster  7 سال پیش
+5 0

تعریف پروژه:

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

پروژه ای که من در نظر گرفتم یک وبسایت TODO لیست خواهد بود به گونه ای که کاربر ابتدا در سیستم ثبت نام خواهد کرد. سپس وارد پنل مختص به خودش میشه و میتونه Task های مختلفی رو ایجاد کنه. هر Task یک تاریخ یادآوری خواهد داشت که وقتی به اون تاریخ رسید یک ایمیل بصورت خودکار به کاربر ارسال میشه برای یادآوری انجام Task.

همچنین کاربر میتونه Task ها رو ویرایش کنه. همچنین سیستم یک ادمین خواهد داشت که ایشون میتونن همه Task ها رو ببینن و هرکدوم رو خواستن پاک کنن (در دنیای واقعی قطعا اینطور نخواهد بود اما برای یادگیری میخوایم این کارها رو بکنیم.) در کنار اون اگر وقتی باقی موند شاید یه کار هیجان انگیز در پایان بکنیم و اونم اینه که وقتی یک Task توی سیستم ایجاد شد در پنل ادمین بصورت Real Time به ادمین Task جدید نشون داده شه. بدون نیاز به هیچ رفرشی. 

پاسخ به سوال 
CodeMaster  7 سال پیش
+6 0

کار با Migration ها:

خوب برای مرحله اول وبسایتمون نیاز به Migration داریم اما اصلا این چی هست؟!

خوب Migration ها فایلهایی هستند که شما توش table ها و فیلدهای  دیتابیستون رو تعیین میکنید. یعنی برای هر table یک فایل migration میسازیم و ساختار اون table رو توش تعیین میکنیم.

خوب که چی برای چی اینو بجای PHPMyadmin استفاده کنم؟

خوب خیلی دلایل زیادی داره از جمله اینکه اگر از version control خوب از این به بعد میتونید حتی ساختار دیتابیستون رو توی version control تون اصطلاحا track کنید و از طرفی دیگه نیازی نیست از IDE تون بیرون بیاید و هرچی که مربوط به دیتابیس هستش رو همون تو انجام میدید و با یک دستور دیتابیستون با table های جدید پر میشه. 

خوب حالا برای ساختن migration از دستور زیر استفاده میکنیم:

 

 php artisan make:model Task -m

دستور بالا یک فایل Model با نام Task براتون میسازه و در کنارش migration اون رو هم همینطور.

خوب برای اینکه فایل migration رو ادیت کنیم به مسیر database->migrations برید و فایل create_tasks_table رو باز کنید:

یک کلاس میبینید که دو تا فانکشن داره یکی Up و دیگری Down. فانکشن Up برای ساخت table و down برای Drop کردنش بکار میره. وارد فانکشن Up بشید کد زیر رو میبینید:

  public function up()
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
        });
    }

خوب این داره چی کار میکنه؟ در واقع داره میگه یک table با نام tasks برام بساز. کار شماروهم راحت کرده و فیلد id رو از قبل واستون گذاشته دیگر فیلد timestamps هستش. این متد دو فیلد در دیتابیس قرار میده یکی created_at و دیگری updated_at. این دو فیلد بصورت خودکار وقتی عملیات insert یا delete انجام میدید توسط فریمورک پرمیشن که در واقعی created_at برای زمان ساخت و updated_at برای زمان آخرین ویرایش فیلد هستش. 

خوب بیاید فیلدهای مخصوص این table رو اضافه کنیم:

  Schema::create('tasks', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->text('body');
            $table->integer('user_id')->unsigned();
            $table->foreign('user_id')->references('id')->on('users');
            $table->date('remind_date');
            $table->timestamps();
        });

خوب ما اومدیم اینجا فیلدهای table مون رو تعیین میکنیم. در مورد اون فیلد foreign هم یک توضیحی بدم اونم اینه که من اومدم گفتم که فیلد user_id یک کلید خارجی است که متصل به id در جدول users هستش.

بعد از اینکه کار migration تموم شد دستور زیر رو در cmd بنویسید:

 php artisan migrate

با این دستور تمام migration هاتون وارد دیتابیستون میشن. اگر وارد phpmyadmin بشید و دیتابیستون رو ببینید تمام جدول ها ساخته شدن. حتما تعجب میکنید جدول users رو چجوری آورد در صورتیکه ما اصلا migration اش رو ننوشتیم. خوب لاراول اینکارو از قبل کرده و یک Migration برای جدول users ساخته که خود به خود بعد از زدن دستور بالا به دیتابیس وارد میشه.

 

پاسخ به سوال 
CodeMaster  7 سال پیش
+6 0

سیستم ثبت نام و لاگین :‌

خوب در این مرحله میخوایم که login/register رو باهم انجام بدیم. همونطور که میدونید و قبلا هم بهش اشاره کردم لاراول migration های مخصوص به table کاربران رو داره و نیازی نیست که خودمون از اول بنویسیمش.

خوب ببینیم چه چیزهایی نیاز داریم برای این بخش:

- یک فرم برای لاگین و یک فرم برای ثبت نام

- ساخت کنترلر مربوطه برای هندل کردن عملیات login/register

- نوشتن لاجیک login/register

و ... 

خوب خیلی کار داریم نه؟

خوب نه هیچ کاری نداریم یه دستور میزنیم همه اینکارا رو برامون انجام میده؟ این یعنی یک فریمورک سریع و قابل اطمینان کافیه دستور زیر رو در cmd بزنید:

 php artisan make:auth

حالا وارد سایتتون بشید. چی شد؟ هیچی با یک دستور سیستم login/register انجام شد. حتی امکان remember me و forgot password هم داره یعنی یک سیستم authentication کامل.

فوق العادست نه؟! D:

0 0
عالیه دوست عزیز (7 سال پیش)
پاسخ به سوال 
CodeMaster  7 سال پیش
+9 0

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

1- وارد پوشه controllers بشید . داخل این پوشه یک پوشه دیگر به اسم auth وجود داره. وارد اون بشید.

2- وقتی اینجا وارد شدید چند کنترلر میبینید. من فقط درباره login صحبت میکنم و باقیشون رو به عهده خودتون میزام. پس فایل LoginContoller.php رو باز کنید.

خوب چی میبینید ؟‌ عملا هیچ چیز بدرد بخوری نمی بینید. پس این چجوری داره لاگین رو هندل میکنه؟ بیاید نگاه دقیقتری داشته باشیم:

 <?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{

    use AuthenticatesUsers;

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

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest', ['except' => 'logout']);
    }
}

خوب این کلاس یک property به اسم redirectTo داره. در واقع این property حاوی مسیری هستش که فریمورک بعد از موفق بودن لاگین کاربر رو بهش redirect میکنه. 

داخل constructor کلاس اما یک middleware وجود داره. از اونجایی که هنوز middleware هارو آموزش ندادم ازش رد میشیم تا بعد.

خوب پس کجا واقعا داره login کردن رو هندل میکنه؟ اگر به اول کلاس نگاه کنید اینرو میبینید:

  use AuthenticatesUsers;

این چی هست؟ در واقع این یک trait هستش. اگر از sublime text یا atom استفاده می کنید کلیدهای ctrl+p رو بزنید و اسم این trait رو بنویسید و سپس enter رو بزنید. اگر هم از phpstorm یا intellij idea استفاده میکنید احتمالا باید دوبار دکمه shift رو بزنید و همینو بنویسید و فایل رو بازکنید. وارد فایل بشید ببینیم چه خبره؟!

تازه فهمیدیم چی شد. اکثر لاجیک در این کلاس قرارداره اگر دقت کنید داخل همین trait از چند trait دیگه هم استفاده شده. اینجا متدهایی مانند showLoginForm برای نمایش فرم لاگین ، هندل کردن لاگین، هندل کردن response مناسب برای لاگین موفق یا ناموفق و همچنین logout وجود داره. بنظرم بصورت کلی باهاش اشنا شدید. 

+1 0
سلام.اقا همینجوری ادامه بده.دمت گرم (7 سال پیش)
+1 0
مهندس احمدی منتظر قسمت بعدی هستیم. خوب توضیح میدین . دستتون درد نکنه (7 سال پیش)
0 0
نوع بیان توضیحات عالی و خدمونی هست و تودرک مطالب کمک می کنه. خدا قوت! فقط ای کاش این قسمت رو اندکی بیشتر توضیح میدادید :) (7 سال پیش)
پاسخ به سوال 
محمد رضا نجفی  7 سال پیش
0 0

شرمنده بخدا قصد من این نبود 

شاید برداشت شما اینگونه بوده در هر حال من عذر میخام اگر منظور و شیوه نگارش من بد بود

+2 0
دوست عزیز بنده به خاطر علاقه ای که داشتم شروع به آموزش کردم نه چیز دیگه ای که شما با این لحن طلب کارانه صحبت میکنید. کسی شما رو مجبور به خواندن این آموزشها نکرده. قطعا درست کردن ویدیو وقت و هزینه زیادی میبره که بنده در توانم نیستش. (7 سال پیش)
+1 0
از دوستان خواهش میکنم که اینجا برای حفظ یکپارچگی آموزشها پاسخ ندن و فقط comment بذارن. ممنون (7 سال پیش)
+1 0
مهندس دمت گرم . خدا خیرت بده . ادامه بده . فقط جاهایی که میبینی نیازه اسکرین برامون بزار . باز ممنونم . سپااااااااااااااس (7 سال پیش)
پاسخ به سوال 
CodeMaster  7 سال پیش
+7 0

یک سری توضیحات:

دوستان سلام. خداروشکر تا به اینجای کار استقبال از آموزشها خیلی خوب بوده و از همتون متشکرم. 

اگر نکته ای رو متوجه نشدید حتما در قالب کامنت بپرسید و من سعی میکنم که در سریعترین زمان جوابتون رو بدم. اگر هم احساس کردید جایی توضیحات بیشتری نیاز هست بگید تا توضیحات بیشتری بدم. 

در انتها هم از محمدرضا عزیز عذر میخوام ظاهرا من منظورشون رو بد متوجه شدم و واکنش نشون دادم که ازشون معذرت میخوام.

+1 0
اختیار دارین . همه میدونیم تو فضای مجازی لحن نوشتاری به صورت صحیحش ممکنه به مخاطب مورد نظر نرسه. خلاصه شرمنده مهندس بابت اشتباه حقیر. (7 سال پیش)
پاسخ به سوال 
CodeMaster  7 سال پیش
+6 0

دیدیم که چقدر نوشتن سیستم authentication در لاراول ساده است. حالا که تونستیم این بخش رو تموم کنیم بریم سراغ نمایش task ها برای اینکه وارد این بخش بشیم لازمه که من بخش routing رو در لاراول توضیح بدم.

Routing: سیستم روتینگ در لاراول بسیار قوی و در عین حال انعطاف پذیر هستش.

خوب حتما با متدهای HTTP آشنا هستید. همون GET / Post / PUT / DELETE / PATCH. خوب فرض کنید ما یک route ای به اسم tasks داریم که به وسیله متد GET میخوایم لودش کنیم. وارد مسیر routes/web.php بشید و این فایل رو باز کنید و این کد رو بهش اضافه کنید:

 Route::get('tasks',function(){
   return 'success'; 
});

اینجا چه اتفاقی افتاد؟‌ در واقع ما اومدیم گفتیم که آقا ما یک route با متد GET داریم به اسم tasks اگر اینو گرفتی وارد اون closure بشو. و اونجا داریم یک متن رو برمیگردونیم. حالا اگه بخوایم یک متد post داشته باشیم چی؟ خیلی سادست:

 Route::post('create',function(){
   //do something 
});

بهمین منوال بقیه متدها رو هم میتونیم تعریف کنیم. 

حالا اگر خواستیم به route مون پارامتر بفرستیم چی؟ مثلا میخوایم پروفایل یک کاربر رو نشون بدیم و میخوایم id کاربر رو در route امون بزاریم تا بتونیم توی query ازش استفاده کنیم:

 Route::get('user/profile/{id}',function(id){
    // findUserById(id);
});

بدینوسیله میتونیم id رو در route مون قرار بدیم. حالا اگه پارامتر route مون اختیاری بود چی؟ دقت کنید که در حالت بالا اگر id در route موجود نباشه لاراول ارور pageNotFound خواهد داد. پس راهکار چیست؟

 Route::get('user/profile/{id?}',function(id){
    // findUserById(id);
});

با قراردادن علامت ؟ در کنار پارامتر اونو اختیاریش کردیم و اگر داده نشه هم اون فانکشن اجرا میشه. 

نکته بعدی وصل کردن Route ها به کنترلر هستش. خوب طبیعتا ما نمی خوایم با closure کار کنیم. چون خیلی کدمون رو کثیف میکنه پس باید Route هامون رو به کنترلر وصل کنیم:

 Route::get('users','UsersController@users');

خوب بخش اول تا , که مشخصه و یاد گرفتیم اما بخش دوم فرق کرده دیگه فانکشن پاس نمیدیم بلکه داریم اسم کنترلرمون رو که در اینجا UsersController  هستش میدیم و یک علامت @ گذاشتیم و سپس یک اسم دیگه اون چیه؟ اون متد ما هست. یعنی درواقع داریم میگیم که وقتی روت users را گرفتی اونو وصل کن به کنترلر userscontroller و متد users که داخل این کلاس قرار داره. یکی دو مبحث دیگه در مورد Routing میمونه که در قالب بخش های دیگه توضیح میدم.

پاسخ به سوال 
CodeMaster  7 سال پیش
+6 0

ساخت کنترلر:

حالا که Routing رو یاد گرفتیم وقتشه که ببینیم در لاراول بریم سراغ ساخت کنترلر. ساخت کنترلر در لاراول خیلی سادست. کافیه دستور زیر رو در Terminal بنویسید:

 php artisan make:controller TestController

به این شکل در مسیر app/http/controllers یک فایل جدید به اسم TestController ساخته میشه که بازش کنید و میبینید که یک کلاس براتون ساخته.

حالا فرض کنید که میخواید کنترلری برای Restful Api بنویسید چکار میکنید؟ پیشنهاد میکنم اگر با اصول و روش ساخت و طراحی Restful api آشنا نیستید قبل از ادامه مطلب این لینک رو بدقت مطالعه کنید :‌لینک

خوب برای اینکه یک کنترلر برای api مون بنویسیم کافیه که دستور زیر رو وارد کنیم:

 php artisan make:controller RestController --resource

با قرار دادن option در آخر دستور به اسم resource به لاراول میگیم که میخوایم یک کنترلر برای restful api مون بسازه. وقتی وارد فایل کنترلر بشید با چنین صحنه ای روبرو میشید:

 class RestController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

 

فوق العادست نه؟! در واقع تمام دردسر های طراحی RESTFUL API با لاراول از بین میره.اما صبر کنید Routing چی؟ یعنی Routing اش هم به همین سادگیه؟ میتونیم ببینیم: وارد فایل routes/api.php بشید. ممکنه واستون سوال پیش اومده فرق فایل های web.php و api.php در پوشه routes چی هست؟ در واقع همونطور که از اسمشون مشخصه فایل api.php مخصوص Route های api هستش. فرق خاصی این دو فایل ندارند بجز اینکه تمام route های فایل api.php یک prefix به اسم api میگیرن یعنی اگر تا قبل مسیرتون بود localhost/tasks حالا میشه localhost/api/tasks همین ولی نوشتن route های rest با route های معمولی فرق داره:

 Route::resource('tasks','TasksController');

خوب چی شد؟ بقیه route های این کنترلر چی میشن؟ چرا متدش تعریف نشده؟‌در واقع لاراول تمام route های restful رو براتون هندل میکنه. برای درک بیشتر موضوع وارد terminal بشید و دستور زیر رو بزنید:

 php artisan route:list

 خوب اینجا اومده تمام route ها و متدهایی که در واکنش به اونها اجرا میشن رو نشون داده. ستون اول که هیچی. ستون دوم متد هستش. یعنی همون GET/POST,... رو نشون میده. ستون سوم آدرس اون Route هستش مثلا /api/user ستون چهارم رو فعلا توضیح نمیدم. و در نهایت ستون آخر Action یا همون متد کنترلری که قراره با رفتن به اون Route اجرا بشه.

0 0
یک سوال برام بیش اومد ! چجوری باید پروژه ای که کامل کردیم رو روی هاست یا wamp بالا بیاریم !؟ بدون این که تو cmd ران کنیم ؟ (7 سال پیش)
0 0
دستورات cmd برای راحت شدن روند توسعه است. ولی شما سایت رو براحتی مانند هر سایت دیگه ای روی سرور قرار میدید. (7 سال پیش)
پاسخ به سوال 
CodeMaster  7 سال پیش
+4 0

Eloquent : 

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

اما Eloquent چی هستش؟

Eloquent یک ORM مخصوص لاراول برای ارتباط با دیتابیس هستش. در واقع این ORM پیچیدگی های Doctrine رو نداره و از طرفی بسیار انعطاف پذیر و راحتتر هستش. حالا بیاید با Eloquent چند کوئری بزنیم ببینیم چجوری هستش؟

ما اینجا برای تست از همون مدل Task ای که قبلا ساخته بودیم استفاده میکنیم:

گرفتن تمام سطرهای جدول:

 Task::all()

با این دستور براحتی تمام سطرهای جدول رو میگیریم. حالا اگر بخوایم سطری با یک ID خاص رو بگیریم:

 Task::find($id)

اگر شرایط خاصی مثل اینکه اگر EMail کاربر فلان بود:

 Task::where('email',$email)->first()

در بالا گفتیم که اولین سطری که با ایمیل داده شده یکسان شد رو برگردون. اگر خواستیم بیشتر از یک سطر برگردونیم به جای first از get استفاده می کنیم.

اما میرسیم به بخش سخت ماجرا جایی که relationship ها مطرح میشه. خوب لاراول چجوری اینو هندل میکنه؟ بیاید اول این بحث رو بشکنیم به بخشهای کوچک تر:

ما اصلا چند نوع رابطه داریم: رابطه یک به یک - رابطه یک به چند - رابطه چند به یک - رابطه چند به چند.  خوب لاراول همه اینها رو هندل میکنه. 

رابطه یک به یک :‌

برای تعریف یک رابطه یک به یک وارد کلاس مدلتون بشید که در اینجا Task هستش. خوب مشخصا هر Task برای یک کاربر هستش پس رابطه ما یک رابطه یک به یک هستش.

  public function user(){
        return $this->belongsTo(User::class);
    }

خوب چی شد؟‌ یک متدی به اسم User نوشتیم و توش اومدیم گفتیم که آقا این کلاس وابسته به کلاس User هستش. در واقع هر Task به متعلق به یک user هستش. حالا اگر بخوایم از task مون user اش رو بگیریم چه کنیم؟ کافیه کد زیر رو بنویسیم:

 $task = Task::first();
 $user = $task->user->name;

خوب در خط اول که اومدیم اولین سطر جدول Task رو گرفتیم بعد خواستیم نام کاربری که این task بهش تعلق داره رو بگیریم کافیه اسم اون function ای که توی کلاس تعریف کردیم رو بنویسیم و بعد اسم اون ستونی که میخوایم بگیریم که اینجا name هستش.

حالا در حالت واقعی هر کاربر چندین task داره که میشه رابطه یک به چند اما برای مثال فرض کنید که هر کاربر فقط یک task داره که ما میخوایم بگیریمش پس توی مدل User مینویسیم:

 public function task(){
        return $this->hasOne(Task::class);
    }

و بدین شکل گفتیم که هر یک user یک Task داره. روند گرفتن task از user هم مثل قبل هستش. 

حالا بیاید برگردیم به دنیای واقعی جایی که هر کاربر چند تا Task داره. یعنی رابطه یک به چند:

     public function tasks(){
        return $this->hasMany(Task::class);
    }

به این شکل ما می تونیم هر چند Task ای که مربوط به کاربر مورد نظرمون هست رو مثل قبل بگیریم.

بخشی از Eloquent رو باهم یادگرفتیم. میمونه مباحث پیشرفته ترش که در ادامه پروژه یاد خواهیم گرفت. دیگه از اینجا میریم که کار اپلیکیشنمون رو انجام بدیم. تبریک میگم چیز زیادی به اتمام آموزشها نمونده. D:

0 0
بسیار عالی/ درک Relation ها تو لاراول یکم سخته/ البته تمرین میخواد فقط / اگه شد از این قسمت بیشتر توضیح بدین / (7 سال پیش)
0 0
حتما- در ادامه بیشتر باهاش کارخواهیم کرد. اگر باز هم درکش سخت بود بگید تا بیشتر توضیح بدم. (7 سال پیش)
0 0
سلام دوست عزیز .خیلی وقته که ادامه ندادید . ممنون میشیم ادامه بدین . اگه میشه یه ذره بیشتر relation هارو توضیح بدین .واقعا آموزش هاتون عالیه (7 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .