web-dev-qa-db-ja.com

laravel)のURLを介して変数を渡す

私はlaravelにかなり慣れておらず、URLの形式を正しく取得するのに苦労しています。

http://mysite/blog?category1ではなく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
4
tom harrison

ルート.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
erajuan

次の場所に新しいルートを追加しました。

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

index.blade:に新しいリンクを追加しました

<a href="{{ URL::route('post.path', [$post->category]) }}">{{ $post->category }}</a> 
1
tom harrison

ドキュメントに示されている代替の.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
Adrenaxus

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
Jerodev