欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

laravel controller __construct construct return redirect 有大用

__construct 如何做return返回?


image.png


image.png


 
投票16最爱                            
                           

我有一个控制器有几种方法,我需要在每个方法的开始添加一个特定的授权检查。所以我以为把这个检查放在构造函数中,

class AdminController extends BaseController {

public function __construct() {
    $this->isAuthorized();
}

protected $layout = "layouts.main";

private function isAuthorized() {
    if (!Session::get('userId')) {
        echo "inside check"; // checking for debug purpose
        return Redirect::to('login');
    }
}

/**
 * Admin dashboard view after authentication.
 */
public function getDashboard() {
    $this->layout->content = View::make('admin.dashboard');
}
                               

}

它不起作用,它只是打印会话内的消息检查并加载仪表板页面,而不是重定向回登录页面。

我也试过这样的东西,

 public function getDashboard() {
    $this->isAuthorized();
    $this->layout->content = View::make('admin.dashboard');
}
                               

当我尝试使用这个奇怪的return语句调用这个方法时,它的工作原理

public function getDashboard() {
    return $this->isAuthorized();
    $this->layout->content = View::make('admin.dashboard');
}
                               

我从这里得到这个想法。如何使用构造函数方法来实现。任何帮助是极大的赞赏。

 
   
为什么不使用路由过滤器?这就是他们的设计目的。 -  Joe Dec 19 '14 at 14:38                                            
   
在将标头发送到浏览器(在本例中为重定向指令)之前,无法打印任何内容。删除echo它应该可以工作 -  丝绸 12月19日14时14分39分                                            
   
我只是回应检查它是否进入检查,它不工作,即使我删除回声。 -  Irfan Ahmed 十四月十四日14时40分                                            
       

3答案  正确答案                

活跃最古老的选票                    
       
投票45投票接受                            

返回 Redirect执行它只能从路由,控制器动作和过滤器。否则你必须打电话send()                                

Redirect::to('login')->send();
                               

但是您应该为此使用过滤器                                

 
   
我只有一个星期的时间在laravel,我必须使用过滤器,如果这些设计来实现这一点。 -  Irfan Ahmed 12月19日14时14分42分                                                
   
我强烈推荐它是的:)我还建议您阅读Laravel内置身份验证的部分文档。这是链接 -  lukasgeiter 十二月19 '14在14:44                                                
   
其实我只接受谷歌登录我的管理面板,所以我避免使用内置的身份验证,我已经看过这个,真的很棒。感谢您指导我。 -  Irfan Ahmed 十四月十四日14时47分                                                
   
虽然这真的适合我:) -  Irfan Ahmed Dec 19 '14 at 14:54                                                
1                                                             
但是请记住,只是因为它的作用并不意味着你应该这样做(如果有更好的方法);) -  lukasgeiter Dec 19 '14 at 14:55                                                
       
       
向上投1向下票                            

确保使用照明\路由\重定向器; 并将其传递给构造函数。(Laravel 5.2)

use Illuminate\Routing\Redirector;

class ServiceController extends Controller {

    public function __construct(Request $request, Redirector $redirect) {
        $this->service = Auth::user()->Service()->find($request->id);
        if (!$this->service) {
            $redirect->to('/')->send();
        }
    }
                           
 
       
达票0向下票                            

事件与照明\路由\重定向器,laravel设置重定向在http头,但也继续执行请求,因为没有重定向。所以解决方案是在重定向后使用die()。

public function __construct(Request $request, \Illuminate\Routing\Redirector $redirecor)
{
    //$bool = ...
    if (false == $bool) {
        $redirecor->action('MyController@myAction')->send() ;
        die();
    }
}
                           
 
       

来自  https://stackoverflow.com/questions/27568147/laravel-constructor-redirect-is-not-working



 

laravel constructor redirect            

               
up vote2down votefavorite                                     

I have a method for checking if a user's role is an admin, if not, redirect them with return redirect('/')->send();. How can I check for user role and redirect the user without displaying the page and waiting for a redirect?

My Controller:

class AdminController extends Controller
{
    public function __construct()
    {
        if (Auth::check())
        {
            $user = Auth::user();
            if ($user->role != 'admin')
            {
                return redirect('/')->send();
            }
        }
        else
        {
            return redirect('/')->send();
        }
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return View('admin/index');
    }
}
                                   
shareimprove this question                                                    
 
5                                                                 
Use a middleware. – tkausl Jul 3 '16 at 14:29                                                    
               
正确答案  (使用中间件 或者过滤器 laravel 4)
                       
activeoldestvotes                            
               
up vote5down voteaccepted                                    

Create your own Middleware. Here is an example. In my example, I have several usergroups in a separate model. You have to change the code for your needs.

Create the Middleware via terminal/console:

php artisan make:middleware UserGroupMiddleware
                                       

The created middleware class could be find in app/Http/Middleware/UserGroupMiddleware.php                                        

You need the following code in your middleware:

namespace App\Http\Middleware;

use Closure;
use App\User;
use App\Usergroup;

class UserGroupMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next, $group)
    {
        if($request->user() !== NULL){
            $userGroupId = $request->user()->group;
            $userGroup = Usergroup::find($userGroupId);

            if($userGroup->slug === $group){
                return $next($request);
            }
        }
        // Redirect the user to the loginpage
        return redirect('/login');
    }
}
                                       

Now you have to register this middleware in app/Http/Kernel.php:

protected $routeMiddleware = [
    // other middlewares

    // Custom Middleware
    'group' => \App\Http\Middleware\UserGroupMiddleware::class
];
                                       

Finally you need to attach the middleware to your route:

Route::group(['middleware' => 'group:admin'], function(){
    // Routes for admins, e.g.
    Route::get('/dashboard', 'SomeController@dashboard');
});

// Or for a single route:
Route::get('/dashboard', ['middleware' => 'group:admin'], function(){
    return view('adminbereich.dashboard');
});
                                       

Remember, that you could pass in multiple middlewares with:

Route::get('/some/route', ['middleware' => ['group:admin', 'auth']], 'SomeController@methodXYZ');
                                   
shareimprove this answer                                                    
 
   
Thanks :) it work. – lock Jul 4 '16 at 15:08                                                        
   
No problem. You are welcome :) – Brotzka Jul 4 '16 at 15:22                                                        
               

来自  https://stackoverflow.com/questions/38170914/laravel-constructor-redirect


普通分类: