2012-12-13 44 views
22

Tôi đang xem switching to laravel cho dự án tiếp theo của mình.Các url động trong laravel?

Dự án tiếp theo của tôi có thể sẽ là một trang web nhỏ với một vài trang tĩnh, một blog và một người quản lý dự án và sẽ sử dụng bộ điều khiển không phải là tuyến đường.

Điều tôi tò mò là cách tôi có thể quản lý các tuyến động trong Laravel.

Về cơ bản, tôi muốn xây dựng trong phần quản trị để tôi có thể dễ dàng tạo các trang tĩnh khi đang di chuyển và các trang tĩnh sẽ có các url tập trung vào SEO, ví dụ: http://domain.com/when-it-started Tôi không muốn phải tạo một bộ điều khiển mới hoặc tuyến đường thủ công cho mỗi trang.

Vì vậy, tôi tự hỏi cách nào là sạch nhất để xử lý việc này.

về cơ bản tất cả các trang tĩnh sẽ chia sẻ cùng một chế độ xem, chỉ một vài biến để thay đổi.

Định tuyến động sẽ hoạt động với bộ điều khiển không thay thế.

Ví dụ: nếu chúng ta có một bộ điều khiển about với một chức năng staff thì đây nên được nạp qua http://domain.com/about/staff

nhưng chúng tôi không có chức năng players, do đó, một cuộc gọi đến http://domain.com/about/players nên kiểm tra cơ sở dữ liệu để xem nếu một tuyến đường năng động tồn tại và các trận đấu. Nếu nó hiển thị, nếu không hiển thị trang 404. Tương tự như vậy đối với một bộ điều khiển không tồn tại. (ví dụ: sẽ không có bộ điều khiển when-it-started!)

Câu trả lời được chọn dường như không hoạt động trong Laravel 4. Có trợ giúp nào không?

+0

@anujarora Tự ý nhấn mạnh lời của câu hỏi/câu trả lời với đậm cho "nổi bật tốt hơn" không được coi là một chỉnh sửa tốt. Trên thực tế, nó có thể được coi là tích cực có hại. Xin vui lòng, hãy xem [Chỉnh sửa bài viết để chỉ giới thiệu nhấn mạnh đậm chấp nhận được?] (Http://meta.stackexchange.com/q/158564/169503). –

+0

tôi không nỗ lực thêm để nhấn mạnh. Tôi đã chỉ nêu bật những từ cần nắm bắt thông báo và giúp hiểu rõ hơn. –

+2

@anujarora nhưng điểm mà Xavi đang tạo ra là kiểu chỉnh sửa được coi là không thể chấp nhận được bởi hầu hết các thành viên trong cộng đồng. sửa ngữ pháp và chính tả là tốt, nhưng thêm "nhấn mạnh" không phải là cái gì đó được cho là thêm vào bài đăng. Vui lòng truy cập vào liên kết mà Xavi cung cấp để thảo luận về – psubsee2003

Trả lời

17

Đối với Laravel 4 làm điều này

Route::get('{slug}', function($slug) { 
    $page = Page::where('slug', '=', $slug)->first(); 

    if (is_null($page)) 
     // use either one of the two lines below. I prefer the second now 
     // return Event::first('404'); 
     App::abort(404); 

    return View::make('pages.show', array('page' => $page)); 
}); 

// for controllers and views 
Route::get('{page}', array('as' => 'pages.show', 'uses' => '[email protected]')); 
+1

cách hoạt động? Trang là mô hình? những gì là requirments cho quan điểm/bộ điều khiển? –

+0

Có Trang là một mô hình, được cập nhật để hiển thị mã để sử dụng bộ điều khiển và chế độ xem. Hy vọng rằng sẽ giúp. – CharlesS

+0

Điều này thật tuyệt vời (: –

8

Bạn có thể sử dụng ký tự đại diện tuyến đường cho công việc, bạn có thể bắt đầu bằng (:any) và nếu bạn cần nhiều phân đoạn url thêm (:all?) tùy chọn, sau đó xác định trang từ slug.

Ví dụ:

Route::get('(:any)', function($slug) { 
    $page = Page::where_slug($slug)->first(); 

    if (is_null($page)) 
     return Event::first('404'); 

    return View::make('page')->with($page); 
}); 
1

Rất giống với Charles' câu trả lời, nhưng trong bộ điều khiển:

public function showBySlug($slug) { 
    $post = Post::where('slug','=',$slug)->first(); 
    // would use app/posts/show.blade.php 
    return View::make('posts.show')->with(array( 
     'post' => $post, 
    )); 
} 

Sau đó, bạn có thể định tuyến như thế này:

Route::get('post/{slug}', '[email protected]') 
    ->where('slug', '[\-_A-Za-z]+');` 

... mà có thêm tiền thưởng cho phép bạn một cách dễ dàng để liên kết thẳng đến các tuyến đường sên trên một trang index, ví dụ:

@foreach ($posts as $post) 
    <h2>{{ HTML::link(
     action('[email protected]', array($post->slug)), 
     $post->title 
    )}}</h2> 
@endforeach 
Các vấn đề liên quan