我在理解命名空间时遇到了问题。它只是感觉非常愚蠢,对于我想要包含的每个Facade或帮助器,我需要将它包含在控制器文件中。
所以,说我有我的控制器的这个部分:
<?php namespace App\Http\Controllers;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Auction;
use App\Bid;
use App\BidBuy;
use App\Http;
use Redirect;
use Session;
use Illuminate\Http\Request;
use Omnipay\Omnipay;
class PayPalController extends Controller {
private $data;
public function getPayment()
{
redirectIfNotLoggedIn();
}
redirectIfNotLoggedIn();
行是我要调用的函数,存储在App / Http / helpers.php中
这是文件:helpers.php
<?php namespace App\Http;
class HelperFunctions {
// Filter for guest only pages
public function redirectIfLoggedIn() {
if (Session::has('steamid')) {
return Redirect::to('/');
} else {
return false;
}
}
// Filter for logged users only pages
public function redirectIfNotLoggedIn() {
if (Session::has('steamid')) {
return true;
} else {
return Redirect::to('/');
}
}
}
回到我已经包含的控制器:use App\Http;
当我打电话给那个功能时,我得到了这个:
FatalErrorException in PayPalController.php line 20:
Call to undefined function App\Http\Controllers\redirectIfNotLoggedIn()
修改
现在我:HelperFunctions.php
位于App/Helpers/HelperFunctions.php
:
<?php namespace App\Helpers;
use Session;
use Redirect;
// Filter for guest only pages
function redirectIfLoggedIn() {
if (Session::has('steamid')) {
return Redirect::to('/');
} else {
return false;
}
}
// Filter for logged users only pages
function redirectIfNotLoggedIn() {
if (Session::has('steamid')) {
return true;
} else {
return Redirect::to('/');
}
}
摘录composer.json
:
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
},
"psr-0": {
"Ignited\\LaravelOmnipay": "src/"
},
"files": [
"app/Helpers/HelperFunctions.php"
]
},
这是我的控制者:
<?php namespace App\Http\Controllers;
//use App\Helpers\HelperFunctions;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Auction;
use App\Bid;
use App\BidBuy;
use Redirect;
use Session;
use Illuminate\Http\Request;
use Omnipay\Omnipay;
class PayPalController extends Controller {
private $data;
public function getPayment(\App\Helpers\HelperFunctions $helper)
{
$helper->redirectIfNotLoggedIn();
}
.. rest of the controller code here ..
}
答案 0 :(得分:0)
不要使用助手。在这样做的过程中,你几乎违反了与OOP相关的所有内容。
相反,请使用Middleware。
在您的控制器中,只需要auth
中间件:
public function __construct()
{
$this->middleware("auth");
}
您正在尝试解决已解决的问题。如果在执行路由/控制器方法之前需要执行某些操作,则应使用中间件(Laravel 5替换路由过滤器)。
然而,您可能必须自定义自己的中间件,然后将其添加到app/Http/Kernel.php
中的中间件阵列。只需使用php artisan make:middleware CustomAuthMiddleware
。
答案 1 :(得分:-1)
您可以在控制器中通过方法注入使用HelperFunctions。像这样:
public function getPayment(\App\Http\HelperFunctions $helper)
{
$helper->redirectIfNotLoggedIn();
}
没有经过测试。