GVKun编程网logo

php – Laravel嵌套资源和可重用的控制器(laravel嵌套事务)

12

如果您想了解php–Laravel嵌套资源和可重用的控制器和laravel嵌套事务的知识,那么本篇文章将是您的不二之选。我们将深入剖析php–Laravel嵌套资源和可重用的控制器的各个方面,并为您解

如果您想了解php – Laravel嵌套资源和可重用的控制器laravel嵌套事务的知识,那么本篇文章将是您的不二之选。我们将深入剖析php – Laravel嵌套资源和可重用的控制器的各个方面,并为您解答laravel嵌套事务的疑在这篇文章中,我们将为您介绍php – Laravel嵌套资源和可重用的控制器的相关知识,同时也会详细的解释laravel嵌套事务的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

php – Laravel嵌套资源和可重用的控制器(laravel嵌套事务)

php – Laravel嵌套资源和可重用的控制器(laravel嵌套事务)

我正在创建一个API,我想要包括常规资源和嵌套资源

例如,我会说我有一个Post资源和Comment资源.我已经设置了适当的路线和控制器,如下所示

路线

Route::resource('posts', 'PostsControllers'); // /posts/{id}
Route::resource('comments', 'CommentsControllers'); /comments/{id}

但我也希望将评论作为帖子的嵌套资源,就像这样

嵌套资源路由

Route::resource('posts.comments', 'PostCommentsControllers'); /posts/{id}/comments/{id}

因为我已经编写了我的CommentsController,我想知道为我的PostsController重用CommentsController的最佳方法

谢谢

解决方法:

使用继承是最好的方法:

class BaseController extends Controller {

    public function index() {

    }   

    public function create() {

    }       

    public function store() {

    }       

    public function update() {

    }       

}

class PostsController extends BaseController {

}

class CommentsController extends BaseController {

}

Laravel 5框架学习之模型、控制器、视图基础流程,laravel框架_PHP教程

Laravel 5框架学习之模型、控制器、视图基础流程,laravel框架_PHP教程

laravel 5框架学习之模型、控制器、视图基础流程,laravel框架

添加路由

复制代码 代码如下:
Route::get(''artiles'', ''ArticlesController@index'');

创建控制器

复制代码 代码如下:
 php artisan make:controller ArticlesController --plain

修改控制器

<&#63;php namespace App\Http\Controllers;

use App\Article;
use App\Http\Requests;
use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

class ArticlesController extends Controller {

 public function index() {
    $articles = Article::all();

    return $articles;
  }

}

登录后复制

可以在浏览器中看到返回的 JSON 结果,cool!

修改控制器,返回视图

 public function index() {
    $articles = Article::all();

    return view(''articles.index'', compact(''articles''));
  }

登录后复制

创建视图

立即学习“PHP免费学习笔记(深入)”;

@extends(''layout'')

@section(''content'')
  <h1>Articles</h1>

  @foreach($articles as $article)
    <article>
      <h2>{{$article->title}}</h2>

      <div>{{$article->body}}</div>
    </article>
  @endforeach
@stop

登录后复制

浏览结果,COOL!!!!

显示单个文章

添加显示详细信息的路由

复制代码 代码如下:
Route::get(''articles/{id}'', ''ArticlesController@show'');

其中,{id} 是参数,表示要显示的文章的 id,修改控制器:

  public function show($id) {
    $article = Article::find($id);

    //若果找不到文章
    if (is_null($article))
    {
      //生产环境 APP_DEBUG=false
      abort(404);
    }
    return view(''articles.show'', compact(''article''));
  }

登录后复制

laravel 提供了更加方便的功能,修改控制器:

  public function show($id) {
    $article = Article::findOrFail($id);

    return view(''articles.show'', compact(''article''));
  }

登录后复制

It''s cool.

新建视图

@extends(''layout'')

@section(''content'')
  <h1>{{$article->title}}</h1>

  <article>
    {{$article->body}}
  </article>
@stop

登录后复制

在浏览器中尝试访问:/articles/1 /articles/2

修改index视图

@extends(''layout'')

@section(''content'')
  <h1>Articles</h1>
  <hr/>
  @foreach($articles as $article)
    <article>
      <h2>
        {{--这种方式可以--}}
        <a href="/articles/{{$article->id}}">{{$article->title}}</a>
        {{--这种方式更加灵活,不限制路径--}}<br>
        <a href="{{action(''ArticlesController@show'', [$article->id])}}">{{$article->title}}</a>
        {{--还可以使用--}}<br>
        <a href="{{url(''/articles'', $article->id)}}">{{$article->title}}</a>
      </h2>

      <div>{{$article->body}}</div>
    </article>
  @endforeach
@stop
登录后复制

以上所述就是本文的全部内容了,希望能够对大家学习Laravel5框架有所帮助。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/980212.htmlTechArticleLaravel 5框架学习之模型、控制器、视图基础流程,laravel框架 添加路由 复制代码 代码如下: Route::get(''artiles'', ''ArticlesController@index''); 创建控制...

Laravel 5框架学习之路由、控制器和视图简介,laravel框架_PHP教程

Laravel 5框架学习之路由、控制器和视图简介,laravel框架_PHP教程

laravel 5框架学习之路由、控制器和视图简介,laravel框架

查看 app/http/routes.php

复制代码 代码如下:
Route::get(''/'', ''WelcomeController@index'');

@是一个界定符,前面是控制器,后面是动作,表示当用户请求url / 的时候,执行控制器 WelcomeController 中的 index 方法

复制代码 代码如下:
app/http/controllers/welcomecontroller.php
public function index()
{
return view(''welcome'');
}

当前默认返回一个视图,视图的名字叫做 welcome,实际上是 welcome.blade.php,blade是laravel的视图模板。

可以查看 `resources/views/welcome.blade.php

修改welcomecontroller.php

立即学习“PHP免费学习笔记(深入)”;

复制代码 代码如下:
public function index()
{
//    return view(''welcome'');
return ''hello, laravel'';
}

在浏览器中测试,得到一个简单的反馈。

我们新建一个路由,在routes.php中增加:

复制代码 代码如下:
Route::get(''/contact'', ''WelcomeController@contact'');

可以新建一个路由,但是现在我们还是直接使用默认的控制器,在 WelcomeController.php 中添加:

复制代码 代码如下:
public function contact() {
    return ''Contact Me'';
}

在浏览器终测试新增加的路由。

我们可以返回简单的字符串,也可以返回json或者html文件,所有的视图文件存储在resource->views中。
例如:return view(''welcome'') ,我们不需要考虑路径,也不要添加.blade.php扩展名,框架自动为我们完成。如果在views目录中需要子目录,例如views/forum子目录,只需要return view(''forum/xxx''),或者跟简单而明确的方式是:return view(''forum.xxx'')。

我们返回一个页面

复制代码 代码如下:
public function contact() {
    return view(''pages.contact'');
}

在 views 目录下创建 pages目录,然后创建contact.blade.php

复制代码 代码如下:



   
    Document


Contact




以上所述就是本文的全部内容了,希望能够对大家学习Laravel5有所帮助。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/980219.htmlTechArticleLaravel 5框架学习之路由、控制器和视图简介,laravel框架 查看 app/Http/routes.php 复制代码 代码如下: Route::get(''/'', ''WelcomeController@index''); @是一个...

Laravel 8 - 如何为嵌套资源路由中的范围设置不同的关系名称

Laravel 8 - 如何为嵌套资源路由中的范围设置不同的关系名称

如何解决Laravel 8 - 如何为嵌套资源路由中的范围设置不同的关系名称?

路由:

我有一个嵌套的资源路由。我用它来声明它:

getSurroundingText()

模型与关系:

我有两个模型,Route::resource(''orders.comments'',\App\Http\Controllers\Backend\OrderCommentController::class) ->parameters([ ''comments'' => ''orderComment:id'' ]) ->except([''show'']); Order

OrderComment 模型:

Order

public function comments() { return $this->hasMany(OrderComment::class); } 模型:

OrderComment

OrderComment 控制器编辑方法签名

public function order()
{
    return $this->belongsTo(Order::class);
}

实际问题

每当我想编辑订单评论时,访问 public function edit(Order $order,OrderComment $orderComment) 都会出现错误:

/orders/1/comments/1/edit

我认为这是基于我在资源中设置的参数。但由于 Call to undefined method App\Models\Order::orderComments() 中的 orderComment 参数,我需要参数为 comment 而不是 $orderComment。这主要是由于命名约定。

可能,排除了我尝试/考虑过的解决方案:

OrderCommentController@edit 模型重命名为 OrderComment。这是不可能的,因为还有其他 Comment 模型,具有不同的列,所以它也不能是多态的。

Comment 关系重命名为 comments。这是一种解决方案,但不是首选方案。这是因为 orderComments 看起来比 $order->comments 等更优雅

结论/问题

那么是否有可能“告诉”Laravel 它应该寻找一个名为 $order->orderComments 而不是 comments 的关系?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Laravel 8资源控制器未获取模型

Laravel 8资源控制器未获取模型

您的路线必须具有相同的变量,例如

Route::get('/employee/{employee}','EmployeeController@show');

并确保为此路由启用了绑定中间件。 ->middleware(['bindings']);

更新资源路由:

Route::resource('/employee','EmployeeController')->middleware('bindings');
,
Route::resource('employee',EmployeeController::class);

https://laravel.com/docs/8.x/controllers#resource-controllers

我们今天的关于php – Laravel嵌套资源和可重用的控制器laravel嵌套事务的分享就到这里,谢谢您的阅读,如果想了解更多关于Laravel 5框架学习之模型、控制器、视图基础流程,laravel框架_PHP教程、Laravel 5框架学习之路由、控制器和视图简介,laravel框架_PHP教程、Laravel 8 - 如何为嵌套资源路由中的范围设置不同的关系名称、Laravel 8资源控制器未获取模型的相关信息,可以在本站进行搜索。

本文标签: