Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel4-当以来宾身份进入时隐藏某些功能的视图_Php_Authentication_Laravel_Laravel 4 - Fatal编程技术网

Php Laravel4-当以来宾身份进入时隐藏某些功能的视图

Php Laravel4-当以来宾身份进入时隐藏某些功能的视图,php,authentication,laravel,laravel-4,Php,Authentication,Laravel,Laravel 4,我试图自定义一个视图,当用户登录时,它将显示Edit和Delete按钮 当用户是来宾时,这两个按钮将被隐藏 我尝试使用相同的控制器和查看文件。并在每个仅限管理员的项目之前的视图中执行Auth::check() 此外,我还在所有Admin路由中添加了auth过滤器 问题是当我访问/时没有记录它。它按预期工作,并隐藏仅限管理员的项目。当以管理员身份访问它时,它会显示仅限管理员的项目 但是当我点击锚定标签时。我被重定向到/login路由,因为我试图访问一个仅限管理员的路由。我只是想让它隐藏管理员只项目

我试图自定义一个视图,当用户登录时,它将显示
Edit
Delete
按钮

当用户是来宾时,这两个按钮将被隐藏

我尝试使用相同的控制器和查看文件。并在每个仅限管理员的项目之前的视图中执行
Auth::check()

此外,我还在所有
Admin
路由中添加了
auth
过滤器

问题是当我访问
/
时没有记录它。它按预期工作,并隐藏仅限管理员的项目。当以管理员身份访问它时,它会显示仅限管理员的项目

但是当我点击锚定标签时。我被重定向到
/login
路由,因为我试图访问一个仅限管理员的路由。我只是想让它隐藏管理员只项目

我已经尝试手动键入它以进入详细信息页面:
/17
它可以获取有关帖子的详细信息,id等于
17
。但是,当我单击此标记时,它会尝试将我重定向到
/admin/post/list/17
。如何根据我是否是管理员来管理这些重定向

编辑:我删除了不相关的代码

以下是我的路线:

<?php    
Route::get('login',                     array('before' => 'guest' , 'as' => 'getLogin',     'uses' => 'UserController@getLogin'));
Route::post('login',                    array('before' => 'csrf' ,  'as' => 'postLogin',    'uses' => 'UserController@postLogin'));
Route::get('make/me/an/admin/account',  array(                      'as' => 'getSignup',    'uses' => 'UserController@getCreateAdmin'));
Route::post('make/me/an/admin/account', array('before' => 'csrf',   'as' => 'postSignup',   'uses' => 'UserController@postCreateAdmin'));
Route::get('logout',                    array('before' => 'auth',   'as' => 'getLogout',    'uses' => 'UserController@getLogout'));

Route::group(array( 'before' => 'auth', 'prefix' => 'admin'), function(){
    Route::get('/' , function(){
        return View::make('admin.main')->with('title', 'Main');
    });

    Route::group(array('prefix' => 'post',), function(){
        Route::get('/',                 array('as' => 'listAllPosts',   'uses' => "PostController@listPosts"));
        Route::get('list',              array('as' => 'listAllPosts',   'uses' => "PostController@listPosts"));
        Route::get('list/{id}',         array('as' => 'listSinglePost', 'uses' => "PostController@showPost"));
            Route::post('addcomment/{post_id}',         array('as' => 'addComment',     'uses' => 'CommentController@addComment')); 
        });

    });
});

Route::get('/', array('as' => 'listAllPostsGuest', 'uses' => 'PostController@listPosts'));
Route::get('/{id}', array('as' => 'listSinglePostsGuest', 'uses' => 'PostController@showPost'));
这是我的控制器:

<?php

class PostController extends BaseController {

    public function listPosts(){
        $posts = Post::all();
        return View::make('admin.post.list')->with('posts' , $posts);
    }

    public function showPost($id){
        if(!is_numeric(trim($id))){
            return Redirect::action('PostController@listPosts');
        }

        $post = Post::find($id);

        if(empty($post)){
            return Redirect::action('PostController@listPosts');
        }
        return View::make('admin.post.postdetails')->with('post', $post);
    }
}
?>

在任何控制器代码加载之前,以
admin/
开头的每个URI都将运行
auth
过滤器。如果您的身份验证筛选器执行任何重定向,那么问题就出在这里


我建议您真正弄清楚如何设置URI结构(使用以
admin
开头的面向公众的URI没有多大意义)。之后,您可以更高效地设置路由,减少筛选冲突等。

当URL也面向公众时,为什么要使用前缀为
admin
的URL?另外,我不理解关于
/17
URL重定向到管理员帖子的第二部分。不过,我要说的是,您的身份验证过滤器将在每个以
admin/
开头的URI之前启动,因此,如果您不希望根据登录状态重定向内容,我会从那里开始。@Cryode好极了。我删除了
admin
post
的前缀,并做了一些更改,效果很好。请把它贴出来作为我能接受的答案。
<?php

class PostController extends BaseController {

    public function listPosts(){
        $posts = Post::all();
        return View::make('admin.post.list')->with('posts' , $posts);
    }

    public function showPost($id){
        if(!is_numeric(trim($id))){
            return Redirect::action('PostController@listPosts');
        }

        $post = Post::find($id);

        if(empty($post)){
            return Redirect::action('PostController@listPosts');
        }
        return View::make('admin.post.postdetails')->with('post', $post);
    }
}
?>