Передача переменной через URL в laravel

Я довольно новичок в laravel и изо всех сил пытаюсь получить правильный формат моего URL.

Форматирует как

http://mysite/blog?category1 instead of http://mysite/blog/category1

Это файлы, которые я использую, есть ли способ поставить маршрут в BlogController

Route.php

Route::get('blog/{category}', function($category = null)
{
// get all the blog stuff from database
// if a category was passed, use that
// if no category, get all posts
if ($category)
$posts = Post::where('category', '=', $category)->get();
else
$posts = Post::all();

// show the view with blog posts (app/views/blog.blade.php)
return View::make('blog.index')
->with('posts', $posts);
});

BlogController

class BlogController extends BaseController {public function index()
{
// get the posts from the database by asking the Active Record for "all"$posts = Post::all();

// and create a view which we return - note dot syntax to go into folder
return View::make('blog.index', array('posts' => $posts));
}
}

лезвие blog.index

@foreach ($posts as $post)

<h2>{{ $post->id }}</h2>
<p>{{ $post->name }}</p>
<p>{{ $post->category }}</p>
<h2>{{ HTML::link(
action('BlogController@index',array($post->category)),
$post->category)}}@endforeach

3

Решение

routes.php

Route::get('category', 'CategoryController@indexExternal');

* .blade.php распечатать заполненный URL

<a href="{{url('category/'.$category->id.'/subcategory')}}" class="btn btn-primary" >Ver más</a>
6

Другие решения

Вместо использования функции в качестве обратного вызова для вашего Route::get использовать контроллер и действие:

Route::get('blog/{category}', 'BlogController@getCategory');

Теперь в вашем BlogController Вы можете создать свою функцию.

class BlogController extends BaseController {

public function index()
{
// get the posts from the database by asking the Active Record for "all"$posts = Post::all();

// and create a view which we return - note dot syntax to go into folder
return View::make('blog.index', array('posts' => $posts));
}

/**
*  Your new function.
*/
public function getCategory($category = null)
{
// get all the blog stuff from database
// if a category was passed, use that
// if no category, get all posts
if ($category)
$posts = Post::where('category', '=', $category)->get();
else
$posts = Post::all();

// show the view with blog posts (app/views/blog.blade.php)
return View::make('blog.index')
->with('posts', $posts);
}
}

Обновить:

Для отображения ваших ссылок в вашем представлении, вы должны использовать HTML::linkAction вместо HTML::link:

@foreach ($posts as $post)

<h2>{{ $post->id }}</h2>
<p>{{ $post->name }}</p>
<p>{{ $post->category }}</p>
{{ HTML::linkAction('BlogController@index', "Linkname", array('category' => $post->category)) }}

@endforeach
0

Вы пытались использовать альтернативный .htaccess, как показано в документации?
Ну вот:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Вы должны поместить его в public папка вашего приложения.

Вот оригинальный .htaccess на тот случай, если у вас его нет по какой-либо причине

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>

RewriteEngine On

# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
0

Я добавил новый маршрут в:

Route::get('blog/{category}', ['as' => 'post.path', 'uses' => 'BlogController@getCategory']);

и добавил новую ссылку в index.blade:

<a href="{{ URL::route('post.path', [$post->category]) }}">{{ $post->category }}</a>
0
По вопросам рекламы [email protected]