как вызвать функцию модели в моем контроллере в Laravel - PullRequest
1 голос
/ 12 марта 2019

У меня есть папка модели внутри папки приложения с именем Models, в этой папке я создал UserModel, и мой контроллер находится в папке App / Http / Controller с именем UserController.Я новичок в laravel, может кто-нибудь, пожалуйста, дайте мне знать, как я могу вызвать мою UserModel в UserController, я попробовал ниже код.

Мой контроллер UserController.php : Этов папке App / Http / Controller.

    <?php 

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use App\User;
use App\Models;


class UsersController extends Controller {

    public function __construct(){
        $users = new UserModel();
    }

    public function index(){
        $user_id = $_GET['id'];
        $token = $_GET['token'];
        $userInfo = $this->users->getUserInformation($user_id); 
        return view('profile.users')->with('user_details', $userInfo);
    }

}

и моей модели: UserModel.php он находится в папке App / Models.

<?php 
namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class UserModel extends Model
{
    public function getUserInformation($id){
        return "User id is : ".$id;
    }   
}
?>

Пожалуйста, предложитеправильный код, чтобы я мог приступить к этому.Спасибо заранее.

Ответы [ 5 ]

1 голос
/ 12 марта 2019

Вы сделали все правильно, просто небольшая настройка, и вы готовы идти: переменная $users в вашем контроллере должна быть объявлена ​​правильно, чтобы она была доступна для всех методов, поэтому обновите свой контроллер до следующего:

<?php 

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use App\User;
use App\Models\UserModel;


class UsersController extends Controller {
    protected $users;
    public function __construct(){
        $this->users = new UserModel();
    }

    public function index(){
        $user_id = $_GET['id'];
        $token = $_GET['token'];
        $userInfo = $this->users->getUserInformation($user_id); 
        return view('profile.users')->with('user_details', $userInfo);
    }

}
1 голос
/ 12 марта 2019

, поскольку $this->users возвращает коллекцию, так что вам придется зацикливаться на ней, а затем вызывать в ней функцию модели.

foreach($this->users as $user){
     $userInfo = $user->getUserInformation($user_id);
}

///
0 голосов
/ 12 марта 2019

Если Вы сделаете так

<?php 
namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class UserModel extends Model
{
    public function getUserInformation(){
        return "User id is : ".$this->id;
    }   
}
?>

В контроллере

<?php 

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use App\UserModel;
use App\Models;


class UsersController extends Controller {

    public function index(){
        $user_id = $_GET['id'];
        $token = $_GET['token'];
        $user = UserModel::find($user_id);
        $userInfo = $user->getUserInformation(); 
        return view('profile.users')->with('user_details', $userInfo);
    }

}

, пожалуйста, попробуйте и дайте мне знать.

0 голосов
/ 12 марта 2019

Вы должны действительно прочитать документацию и сделать свой стиль более похожим на Laravel

Контроллер:

<?php 

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;

class UsersController extends Controller {
    public function index()
    {
        // this is where you show list of users
        // I recommend you reading this: 
        //https://laravel.com/docs/5.8/controllers#resource-controllers
    }

    public function show(User $user)
    {
        return view('profile.users.show')->with('user', $user);
    }
}

Маршрут:

Route::get('users/{user}', 'UsersController@show');

Вид:

<span>User id is : {{ $user->id }}</span>
0 голосов
/ 12 марта 2019

Я думаю, что лучший способ - воспользоваться внедрением зависимостей Laravel и внедрить зависимость непосредственно в метод контроллера:

class UsersController extends Controller {


    public function index(UserModel $users, Request $request){
        //Using the request object is recommended
        $user_id = $request->input('id');
        $token = $request->input('token');
        $userInfo = $users->getUserInformation($user_id); 
        return view('profile.users')->with('user_details', $userInfo);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...