Advanced Forum ب laravel 5.8 الجزء الثاني


فهاد الجزء الثاني من forum ب laravel 5.8 غادي نكملوا ل projet ديالنا ونزيدو ل controllers لي فيهم les fonctions لي غادي يمكنوا من إضافة الأسئلة و أيضا إختيار أفضل الاجوبة لكل سؤال وعرضها.

نظرة سريعة بالفيديو

1- تعديل ل MODEL USER

منبعد سير ل model User فيه كندير العلاقة مع ل model Question و Reply.

الكود لي غادي تزيد هو :

                                //
    public function questions(){
        return $this->hasMany(Question::class);
    }

    public function replies(){
        return $this->hasMany(Reply::class);
    }
                            

2- إضافة ل controller HomeController

منبعد زيد authentification لي هي système ديال login دير ل commande لي معروفة :

php artisan make:auth

منبعد غادي تلقى ل controller HomeController تزاد فيه غادي تزيد fonction index لي كترجع الأسئلة مع les catégories.

الكود لي غادي تزيد هو :

                                //
<?php

namespace App\Http\Controllers;
use App\Question;
use App\Category;
use Illuminate\Http\Request;
use Carbon\Carbon;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        Carbon::setLocale('fr');
        $questions = Question::latest()->paginate(10);
        $categories = Category::has('questions')->get();

        return view('home')->with([
            'questions' => $questions,
            'categories' => $categories
        ]);
    }
}
                            

3- إضافة ل controller QuestionsController

منبعد زيد controller جديد سميه QuestionsController فيه les fonctions لي معروفين ديال الإسترجاع والإضافة الجديد لي عندي هي ل fonction addVote لي كتزيد صوت للسؤال و removeVote لي كتنقص صوت و category لي كنسترجع بها الأسئلة الخاصة بكل category.

الكود لي غادي تزيد هو :

                                //
<?php

namespace App\Http\Controllers;
use App\Question;
use App\Category;
use Illuminate\Http\Request;
use Carbon\Carbon;
use App\Http\Requests\QuestionRequest;

class QuestionsController extends Controller
{

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }


    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
        Carbon::setLocale('fr');
        $questions = Question::latest()->paginate(10);
        $categories = Category::all();

        return view('home')->with([
            'questions' => $questions,
            'categories' => $categories
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
        $categories = Category::all();
        return view('questions.create')->with([
            'categories' => $categories
        ]);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(QuestionRequest $request)
    {
        //
        Question::create([
            'title' => $request->title,
            'body' => $request->body,
            'slug' => str_slug($request->title),
            'category_id' => $request->category_id,
            'user_id' => auth()->user()->id,
        ]);
        return redirect('/home')->withSuccess('Question ajoutée');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show(Question $question)
    {
        //
        $categories = Category::has('questions')->get();
        return view('questions.show')->with([
            'question' => $question,
            'categories' => $categories
        ]);
    }


    public function addVote(Question $question){
        $question->increment('votes');
        return redirect()->back();
    }

    public function removeVote(Question $question){
        $question->decrement('votes');
        return redirect()->back();
    }

    public function category(Category $category)
    {
        //
        Carbon::setLocale('fr');
        $questions = Question::where('category_id',$category->id)->latest()->paginate(10);
        $categories = Category::all();

        return view('home')->with([
            'questions' => $questions,
            'categories' => $categories
        ]);
    }


}
                            

4- إضافة ل controller RepliesController

منبعد زيد controller جديد سميه RepliesController فيه ل fonction ديال إضافة جواب وأيضا إختيار جواب كأحسن جواب أو حذفو من لائحة أحسن الأجوبة.

الكود لي غادي تزيد هو :

                                    //
<?php

namespace App\Http\Controllers;
use App\Reply;
use Illuminate\Http\Request;

class RepliesController extends Controller
{

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
        $this->validate($request,[
            'body' => 'required|min:10'
        ]);
        auth()->user()->replies()->create([
            'body' => $request->body,
            'question_id' => $request->question_id
        ]);
        return redirect()->back()->withSuccess('Réponse ajoutée');
    }

    public function markAsBest($id)
    {
        //
        $replies = Reply::all();
        foreach ($replies as $reply) {
            $reply->bestAnswer = 0;
            $reply->save();
        }
        Reply::find($id)->update([
            'bestAnswer' => 1
        ]);
        return redirect()->back()->withSuccess('Réponse marquée');
    }

    public function removeAsBest($id)
    {
        //
        Reply::find($id)->update([
            'bestAnswer' => 0
        ]);
        return redirect()->back()->withSuccess('Réponse retirée');
    }

}
                                

5- إضافة ل form validation لفورم إضافة سؤال

فباش نديرو ل form validation غادي نزيدو Request بل commande :


php artisan make:request QuestionRequest


غادي نمشي ل app/Http/Requests تما غادي نلقى الملف تزاد تما كنزيد les régles لي بغيت والملف راه خدمنا به فل controller QuestionsController فل fonction store.


الكود لي غادي تزيد ف QuestionRequest هو :


                                    //
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class QuestionRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            //
            'title' => 'required|min:10',
            'body' => 'required|min:10',
            'category_id' => 'required'
        ];
    }
}
                                


إشترك في قناتنا على اليوتيوب

بحث في الموقع


إشترك للتوصل بالجديد