How to include a subfolder controller to other subfolder controller and sunfolder controller to Controller's controller in laravel.
For example if I create a folder in to controllers folder name admin(Controllers/admin) and in admin there are 2 controllers A(Controllers/admin/AController.php) and B(Controllers/admin/BController.php) how can I include B into A. And there is a 3rd controller C (Controllers/CController.php ) in Controllers folder and how can I include controller B in C.
Use the controller exact namespace
AController
<?php
namespace App\Http\Controllers\admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class AController extends Controller
{
public function getTestA()
{
return A;
}
}
BController
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class BController extends Controller
{
public function getTestB()
{
return B;
}
}
Use the Use method to call controllers
Must use this use methods
use App\Http\Controllers\admin\AController;
use App\Http\Controllers\admin\BController;
CController
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Controllers\admin\AController;
use App\Http\Controllers\admin\BController;
class CController extends Controller
{
public function GetA()
{
$a = new Acontroller();
return $a->getTestA();
}
public function GetB()
{
$b = new Bcontroller();
return $b->getTestB();
}
}
Related
I'm trying to redirect to an external URL from a helper class.
Here's my controller:
<?php
namespace App\Http\Controllers;
use App\Lead;
use Illuminate\Http\Request;
use App;
use Helper;
class MyController extends Controller
{
public function entities_get() {
Helper::my_function(); // <---- Call my Helper class method to redirect.
return view( 'template' );
}
}
Here's my helper class used in the controller:
<?php
namespace App\Helpers;
class Helper
{
public static function my_function()
{
return redirect()->away( 'https://www.google.com' ); // <---- Not redirecting.
}
}
Why is the redirect() not working inside my_function()? Do I need to include some Laravel classes using the PHP "use" statement?
You can add send method and it will work.
<?php
namespace App\Helpers;
class Helper
{
public static function my_function()
{
return redirect()->away('https://www.google.com')->send();
}
}
Greetings guys i'm having a challenge figuring out how to make this method in the base controller so that i initialize it there and call it in all other controllers that i wish.
I want to create this in the base controller , then call it in other controllers
$paynow = new Paynow(
'9644',
'7e3bebb4-6dbf-4f8f-9e10-aceafd02c8db',
'Return_url',
'Result_url'
);
Images
1.This is what i have done in the base controller
Image 2. This is where im trying to use it to call its member functions
Image 3. Is the error that im getting
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
protected function callPayNow()
{
return new Paynow(
'9644',
'7e3bebb4-6dbf-4f8f-9e10-aceafd02c8db',
'Return_url',
'Result_url'
);
}
}
In your AnyController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class AnyController extends Controller
{
public function anyMethod()
{
$this->callPayNow();
}
}
if I undersend you well,
Maybe the best approach is to create new controller that extends BasController:
class Controller extends BaseController
{
public function payNow()
{
return new Paynow(
'9644',
'7e3bebb4-6dbf-4f8f-9e10-aceafd02c8db',
'Return_url',
'Result_url'
);
}
}
And then in your other controller you can extend your new controller:
class UserController extends Controller
{
//For example
public function show($id, Request $request)
{
$payNow = $this->payNow();
$payment = $payNow->createPayment($currentOrder, $request->get('email'));
return response()->json("done");
}
}
Paynow will be called in every controller that extends this controller.
I'm following the Laracasts series and have run into an issue on the episode Laravel 5.4 From Scratch: Route Model Binding.
Laravel version:
Laravel Framework 5.6.13
The error:
Class App\Http\Controllers\Panel does not exist
This shows on both the /panel and /panel/1 pages
App\Http\Controllers\PanelController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
// Code works if I uncomment below line, and change the show function to "show($panel)"
//use App;
class PanelController extends Controller
{
public function index()
{
$panels = Panel::all();
return view('panel/index', compact('panels'));
}
public function show(Panel $panel)
{
return $panel;
return view('panel/show', compact('panel'));
}
}
routes/web.php
// Main panel view
Route::get('/panel', 'PanelController#index');
// Individual panel view
Route::get('/panel/{panel}', 'PanelController#show');
App/Panel.php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Panel extends Model
{
public static function activePanels()
{
return static::where('status', 1)->get();
}
}
Add this line in panel controller before the class
use App\Panel;
You need to add use App\Panel; to top of class
Or call it by full namespace $panels = App\Panel::all();
You don't included your model to class.
Add App\Panel to main include section:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Panel;
class PanelController extends Controller
{
public function index()
{
$panels = Panel::all();
return view('panel/index', compact('panels'));
}
public function show(Panel $panel)
{
return $panel;
return view('panel/show', compact('panel'));
}
}
or load model in your class method manually:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PanelController extends Controller
{
public function index()
{
$panels = App\Panel::all();
return view('panel/index', compact('panels'));
}
public function show(Panel $panel)
{
return $panel;
return view('panel/show', compact('panel'));
}
}
I have a problem with passing variable (data) to all Views. I created BaseController that extends default Laravel controller and "global" variables are defined there. When I extend other controller with BaseController i got error that variable is not defined. Does someone knows where's the problem?
Here is code:
namespace App\Http\Controllers;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Sentry;
use Illuminate\Http\Request;
use View;
class BaseController extends Controller {
public function __construct() {
$obavijesti="Other data";
$izbornici="Some data";
View::share ( 'izbornici', $izbornici );
View::share ( 'obavjesti', $obavjesti );
}
}
class AdminController extends BaseController {
.
.
.
echo '<pre>';var_dump($izbornici);echo '</pre>';//Error pop ups here
.
.
.
}
You are doing something wrong here. view::share() is used for sharing a piece of data across all views not controller.
namespace App\Http\Controllers;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Sentry;
use Illuminate\Http\Request;
use View;
//If you wish to get these variables in your other controllers you do this:
class BaseController extends Controller {
public $obavijesti="Other data";
public $izbornici="Some data";
public function __construct() {
View::share ( 'izbornici', $this->izbornici );
View::share ( 'obavjesti', $this->obavjesti );
}
}
class AdminController extends BaseController {
//if you have a constructor in other controllers you need call constructor of parent controller (i.e. BaseController) like so:
public function __construct(){
parent::__construct();
}
public function Index(){
echo $this->obavijesti;
}
}
You can also use a composer to share variables to views
//1. Create a composer file at app\Composers\AdminComposer.php
//NB: create "app\Composers" if does not exists
//2. Inside AdminComposer.php add this.
<?php namespace App\Composers;
class AdminComposer
{
public function __construct()
{
}
public function compose($view)
{
//Add your variables
$view->with('izbornici', 'Other data')
->with('obavjesti', 'Some other data');
}
}
//3. In you controller do this:
<?php namespace App\Http\Controllers;
//NB: I removed your BaseController because I believe the issue is coming from //there
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Sentry;
use Illuminate\Http\Request;
use View;
class AdminController extends Controller{
public function __construct(){
//Lets use AdminComposer to share variables to adminpage.blade.php view
View::composers([
'App\Composers\AdminComposer' => array('adminpage')
]);
}
public function Index(){
return view('adminpage');
}
}
Ideally you're going to want a combination of what you have, and the other answer posted here.
<?php
class BaseController extends Controller {
protected $obavijesti = 'Other data';
protected $izbornici = 'Some data';
public function __construct() {
View::share('obavjesti', $this->obavjesti);
View::share('izbornici', $this->izbornici);
}
}
Then in all of your views, you have access to the variables $obavjesti and $izbornici. Now in your other controllers, anything that extends BaseController can do the following:
class AdminController extends BaseController {
public function index() {
echo $this->ixbornici;
echo $this->obavjesti;
}
}
I have following function and want to call it from view. Basically i want to put all common functions in one file. I am not sure where to create that file and how to call it inside controller and view.
<?php namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use DB;
class CommonController extends Controller {
public function BytesToMB($bytes=0)
{
if(empty($bytes))
return 0;
$kb = ceil($bytes/1024);
$mb = ceil($kb/1024);
return $mb;
}
}
So far i have created CommonController.php in app/Http/Controllers and put above function in it.
Then in other controller i have tried to call it following way:
use App\Http\Controllers\Common;
class SongsController extends Controller {
public function index($id)
{
echo Common::BytesToMB('7012187');
}
}
But i am getting error:
Class 'App\Http\Controllers\Common' not found
Ok, new try. You missed to use the complete class name and add the static keyword:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use DB;
class CommonController extends Controller {
public static function BytesToMB($bytes=0)
{
if(empty($bytes))
return 0;
$kb = ceil($bytes/1024);
$mb = ceil($kb/1024);
return $mb;
}
}
And then:
<?php
namespace App\Http\Controllers;
// You do not need to define this, if you are in the same namespace
use App\Http\Controllers\CommonController;
class SongsController extends Controller {
public function index($id)
{
echo CommonController::BytesToMB('7012187');
}
}
Another and more OOP solution is to use the function from the parent class:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use DB;
class CommonController extends Controller {
protected function BytesToMB($bytes=0)
{
if(empty($bytes))
return 0;
$kb = ceil($bytes/1024);
$mb = ceil($kb/1024);
return $mb;
}
}
And then:
<?php
namespace App\Http\Controllers;
// You do not need to define this, if you are in the same namespace
use App\Http\Controllers\CommonController;
class SongsController extends CommonController {
public function index($id)
{
echo $this->bytesToMB('7012187');
}
}