2013-07-01 14 views
8

Str :: मेरी दृश्यपटल यूआरएल पीढ़ी के लिए स्लग को देखते हुए लेकिन बस सोच कैसे तुम लोग, मार्गों आदि के साथ लागू उदाहरण के लिए के बारे में जाना है, कैसे तुम लोगों http://www.example.com/courses/this-courseLaravel Slugs :: स्लग

को http://www.example.com/courses/1 बदलने के बारे में जाना होगा

// I have a slug field in my courses table and a slug field in my categories table, along with a category_id field in my courses table. 

// Route 

Route::get('courses/{categorySlug}/{slug?}', function($categorySlug, $slug) { 
    $course = Course::leftJoin('categories', 'categories.id', 'courses.category_id') 
     ->where('categories.slug', $categorySlug) 
     ->where('courses.slug', $slug) 
     ->firstOrFail(); 

    return View::make('courses.show')->with('course', $course); 
}); 

वर्क्स एक आकर्षण की तरह:

उत्तर

12

ठीक है, मैं इसे इस तरह से किया था। यह $ श्रेणी स्लॉग और $ स्लग वैरिएबल प्राप्त करता है, फिर डेटाबेस से सही पाठ्यक्रम ऑब्जेक्ट प्राप्त करने के लिए उन्हें इलोकेंट मॉडल कोर्स फ़िल्टर करने के लिए उपयोग करता है।

संपादित: आप की तरह अपने दृश्य में एक यूआरएल उत्पन्न कर सकते हैं:

<a href="{{ URL::to('courses/'.$course->category->parentCategorySlug($course->category->parent_id).'/'.$course->category->slug.'/'. $course->slug) }}" title="{{ $course->title }}">{{ $course->title }}</a> 

एक नीचे है कि पुन: प्राप्त करता तरह मेरे श्रेणी में एक विधि है:

http://www.example.com/courses/it-training/mcse

की तरह कुछ करने से अभिभावक श्रेणी स्लग। यह बेहतर हो सकता है हालांकि कुछ प्रकार के प्रेजेंटर क्लास का उपयोग करना जो आपको $ कोर्स-> यूआरएल का उपयोग करने की इजाजत देता है लेकिन मुझे अभी तक ऐसा करने के लिए नहीं मिला है। जब मैं करता हूं तो मैं जवाब अपडेट कर दूंगा।

public function parentCategorySlug($parentId) 
{ 
    if ($parentId === '0') 
    { 
     return $this->slug; 
    } 

    return $this->where('id', $parentId)->first()->slug; 
} 
1

मैं भी एक समान URL मानचित्रण लागू कर दिया है, लेकिन मैं दोनों आईडी और अनुरोध किया गया URL में स्लग, इस तरह की है करने के लिए पसंद:

http://www.example.com/courses/1/my-laravel-course

इस विधि मुझे पाने के लिए अनुमति देता है मेरी डीबी तालिका में स्लग स्टोर करने के बजाय, URL में दी गई आईडी से course ऑब्जेक्ट का अनुरोध किया गया।

Route::post('courses/(:num)/(:any)', function ($courseid, $slug) { 
    $course = Course::where('id', '=', $courseid)->get(); 
    return View::make('courses.show')->with('course', $course); 
} 
+0

मैं इसे कैसे प्रदर्शित करने के लिए नियंत्रक में इस यूआरएल मिलता है? – cawecoy

+0

यूआरएल अद्वितीय होना चाहिए, इस मामले में आप '/ 1/my-laravel-course' और '/ 1/lorem-ipsum' के लिए वही प्राप्त करेंगे उदाहरण के लिए –

3

मेरे लिए मैंने एक सहायक समारोह बनाया और here से निम्नलिखित विधि का उपयोग किया।

public static function getSlug($title, $model) { 
    $slug = Str::slug($title); 
    $slugCount = count($model->whereRaw("url REGEXP '^{$slug}(-[0-9]*)?$'")->get()); 
    return ($slugCount > 0) ? "{$slug}-{$slugCount}" : $slug; 
} 
1

आपके पास संबंधित मॉडल स्लग बना सकते हैं, और इसलिए की तरह अपने तरीकों में पाठ्यक्रम दृष्टिकोण:

$course = Slug::where('slug', $slug) -> firstOrFail() -> course; 
संबंधित मुद्दे